Oh, definitely don't give up, you are just getting started! I do think you may want to step back a little and analyze what is going on. The list required error is due to you not specifying a required parameter to the very first bit of code in the attached script. It would probably benefit you to start over. This script is fine--but if you don't understand it you are going to get a headache every time you have to touch it and that's not good.
So, stepping back. The one and only goal of your NEW script is to detect webdav. Forget about email for now, or IIS process detection.
As I stated before, you'll need to know webdav URLs that are valid for your site. You already have server names or IPs in a file, right? It should be a matter of tacking on just a bit of text.
Do these steps at a PROMPT. Trust me, play in the prompt and you'll come to a better understanding of the objects you are tossing around. Do a single logical operation at a time and go slow. Set things to temporary variables, and then inspect them with Get-Member and other methods. For example (you don't need to type the comments, the part starting with #):
$a = get-content serverlist.txt
$a | get-member # show properties and methods
$a | select -first 10 # displays first 10 lines of file
$a.length # now you know the number of lines in the file
$a[0] # displays first line
$a[-1] # last line
$a[0].ToUpper() # capitalizes a string
Now make the URLs...
$url = $a | foreach-object { "http://$_/MySitePath" }
$url # check out your new handiwork
Now test them using that function I showed you earlier. Just type it in, straight into the prompt. You'll see that PowerShell will continue to prompt you for new lines as long as you have an open script block, showing the ">>" prompt. Here, I go through these steps. I had to clean the results because I didn't have a set of webdav servers handy and each of the lines in the file caused errors. :)
PS C:\> function Test-WebDav ()
>> {
>> param ( $Url = "$( throw 'URL parameter is required.')" )
>> $xhttp = New-Object -ComObject msxml2.xmlhttp
>> $xhttp.open("OPTIONS", $url, $false)
>> $xhttp.send()
>> if ( $xhttp.getResponseHeader("DAV") ) { $true }
>> else { $false }
>> }
>>
PS C:\> $url = $a | ForEach-Object { "http://$_/path" }
PS C:\> $url
http://one/path http://two/path http://three/path
PS C:\> $url | ForEach-Object { Test-WebDav $_ }
False
False
False