我有很多網站來監視他們的上/下狀態,可能的錯誤,ping和其他事情,我設法得到一個腳本。我的想法如下:該腳本將與任務計劃程序一起運行,獲得結果並向我們(從SQA出版物)發送電子郵件。所以,我設法創建了成功的腳本,他獲得了我需要的所有內容,並在C:驅動器中生成了一個html文件。我的問題是,在得到結果後,發送電子郵件的功能不會發送電子郵件。我沒有收到任何錯誤消息,調試很好,SMTP和所有配置都是正確的。但它不會發送附帶HTML文件的電子郵件!Powershell腳本來監控狀態併發送電子郵件結果
的代碼是這樣的:
$URLListFile = "C:\URLList.txt"
$URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue
$Result = @()
Foreach($Uri in $URLList) {
$time = try{
$request = $null
$result1 = Measure-Command { $request = Invoke-WebRequest -Uri $uri }
$result1.TotalMilliSeconds
}
catch
{
$request = $_.Exception.Response
$time = -1
}
$result += [PSCustomObject] @{
Time = Get-Date;
Uri = $uri;
StatusCode = [int] $request.StatusCode;
StatusDescription = $request.StatusDescription;
ResponseLength = $request.RawContentLength;
TimeTaken = $time;
}
}
if($result -ne $null)
{
$Outputreport = "<HTML><TITLE>Website Report Status</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Report Status </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B> Code </B></TD><TD><B> Status </B></TD><TD><B> Duration </B></TD><TD><B> MS (Ping) </B></TD</TR>"
Foreach($Entry in $Result)
{
if($Entry.StatusCode -ne "200")
{
$Outputreport += "<TR bgcolor=red>"
}
else
{
$Outputreport += "<TR>"
}
$Outputreport += "<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TR>"
}
$Outputreport += "</Table></BODY></HTML>"
}
$Outputreport | out-file C:\URLReport.htm
Invoke-Expression C:\URLReport.htm
$EmailFrom = "[email protected]"
$EmailTo = "[email protected]"
$EmailSubject = "URL Report"
$emailbody = " body message "
$SMTPServer = "smtpserver.company.com"
$emailattachment = "C:\URLReport.htm"
function send_email {
$mailmessage = New-Object system.net.mail.mailmessage
$mailmessage.from = ($emailfrom)
$mailmessage.To.add($emailto)
$mailmessage.Subject = $emailsubject
$mailmessage.Body = $emailbody
$attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'html')
$mailmessage.Attachments.Add($attachment)
$mailmessage.IsBodyHTML = $true
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.Send($mailmessage)
}
EDIT4:>($ SMTPSERVER,587)Beeing我們的SMTP服務器使用 「587」 的端口。
您需要說明「不發送」。對於初學者來說,你不會調用send_email函數,這對發送電子郵件來說有點阻礙。任何錯誤消息?此外,還有一些產品(一些免費,一些不免費)執行網站監控。爲什麼不使用其中的一種,而不是自己滾動? – alroc
您是否嘗試過使用現有的Send-MailMessage? – Jimbo
它只是不會發送電子郵件,它執行腳本的第一部分,它似乎不會執行「電子郵件」部分。關於我更正的「send_email」,缺少腳本的一部分。事情是,我的公司不使用其他軟件,他們不會支付這些軟件的許可證。除此之外,我的老闆讓我寫這篇文章,並用它來保持學習PowerShell。 – InLoveWithPs1