Powershell支持发邮件,目前我找到两种方法,第一种方法是通过自带的Send-EmailMessage,但这个方法好像难以处理自动输入凭据的问题;第二个方法是通过.Net提供的接口,可以实现自动发邮件。
以下节选的Send-EmailMessage帮助信息(通过Get-Help Send-EmailMessage -Detail获取)
语法
Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>
] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Enco
ding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]
说明
Send-MailMessage cmdlet 可从 Windows PowerShell 内发送电子邮件。
参数
-Attachments <string[]>
指定要附加到电子邮件的文件的路径和文件名。您可以使用此参数或通过管道将路径和文件名传递给 Send-MailMessage。
-Bcc <string[]>
指定接收邮件副本但未列为邮件收件人的电子邮件地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。
-Body <string>
指定电子邮件的正文(内容)。
-BodyAsHtml [<SwitchParameter>]
指示 Body 参数的值包含 HTML。
-Cc <string[]>
指定电子邮件要抄送 (CC) 到的电子邮件地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。
-Credential <PSCredential>
指定有权执行此操作的用户帐户。默认值为当前用户。
键入用户名,例如“User01”或“Domain01\User01”。或者,输入 PSCredential 对象,例如来自 Get-Credential cmdlet 的对象。
-DeliveryNotificationOption <DeliveryNotificationOptions>
指定电子邮件的送达通知选项。您可以指定多个值。“None”为默认值。此参数的别名为“dno”。
送达通知会通过电子邮件发送到 To 参数的值中指定的地址。
有效值包括:
-- None:无通知。
-- OnSuccess:成功送达时通知。
-- OnFailure:未能送达时通知。
-- Delay:送达延迟时通知。
-- Never:从不通知。
-Encoding <Encoding>
指定对正文和主题使用的编码。有效值包括 ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default 和 OEM。ASCII 是默认值。
-From <string>
指定用来发送邮件的地址。输入姓名(可选)和电子邮件地址,如“Name <someone@example.com>”。此参数是必需的。
-Priority <MailPriority>
指定电子邮件的优先级。此参数的有效值包括“普通”、“高”和“低”。“普通”是默认值。
-SmtpServer <string>
指定发送电子邮件的 SMTP 服务器的名称。
默认值是 $PSEmailServer 首选项变量的值。如果未设置该首选项变量并且省略了此参数,该命令会失败。
-Subject <string>
指定电子邮件的主题。此参数是必需的。
-To <string[]>
指定邮件发送到的地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。此参数是必需的。
-UseSsl [<SwitchParameter>]
使用安全套接字层 (SSL) 协议来建立与远程计算机的连接,以便发送邮件。默认情况下,不使用 SSL。
<CommonParameters>
此 cmdlet 支持通用参数: Verbose、Debug、
ErrorAction、ErrorVariable、WarningAction、WarningVariable、
OutBuffer 和 OutVariable。有关详细信息,请键入
“get-help about_commonparameters”。
Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>
] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Enco
ding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]
说明
Send-MailMessage cmdlet 可从 Windows PowerShell 内发送电子邮件。
参数
-Attachments <string[]>
指定要附加到电子邮件的文件的路径和文件名。您可以使用此参数或通过管道将路径和文件名传递给 Send-MailMessage。
-Bcc <string[]>
指定接收邮件副本但未列为邮件收件人的电子邮件地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。
-Body <string>
指定电子邮件的正文(内容)。
-BodyAsHtml [<SwitchParameter>]
指示 Body 参数的值包含 HTML。
-Cc <string[]>
指定电子邮件要抄送 (CC) 到的电子邮件地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。
-Credential <PSCredential>
指定有权执行此操作的用户帐户。默认值为当前用户。
键入用户名,例如“User01”或“Domain01\User01”。或者,输入 PSCredential 对象,例如来自 Get-Credential cmdlet 的对象。
-DeliveryNotificationOption <DeliveryNotificationOptions>
指定电子邮件的送达通知选项。您可以指定多个值。“None”为默认值。此参数的别名为“dno”。
送达通知会通过电子邮件发送到 To 参数的值中指定的地址。
有效值包括:
-- None:无通知。
-- OnSuccess:成功送达时通知。
-- OnFailure:未能送达时通知。
-- Delay:送达延迟时通知。
-- Never:从不通知。
-Encoding <Encoding>
指定对正文和主题使用的编码。有效值包括 ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default 和 OEM。ASCII 是默认值。
-From <string>
指定用来发送邮件的地址。输入姓名(可选)和电子邮件地址,如“Name <someone@example.com>”。此参数是必需的。
-Priority <MailPriority>
指定电子邮件的优先级。此参数的有效值包括“普通”、“高”和“低”。“普通”是默认值。
-SmtpServer <string>
指定发送电子邮件的 SMTP 服务器的名称。
默认值是 $PSEmailServer 首选项变量的值。如果未设置该首选项变量并且省略了此参数,该命令会失败。
-Subject <string>
指定电子邮件的主题。此参数是必需的。
-To <string[]>
指定邮件发送到的地址。输入名称(可选)和电子邮件地址,如“Name <someone@example.com>”。此参数是必需的。
-UseSsl [<SwitchParameter>]
使用安全套接字层 (SSL) 协议来建立与远程计算机的连接,以便发送邮件。默认情况下,不使用 SSL。
<CommonParameters>
此 cmdlet 支持通用参数: Verbose、Debug、
ErrorAction、ErrorVariable、WarningAction、WarningVariable、
OutBuffer 和 OutVariable。有关详细信息,请键入
“get-help about_commonparameters”。
方法一的缺点:凭据的处理比较麻烦。如果要输入凭据,要传入一个Credential对象,而且在生成该对象的时候,要求手动输入凭据,无法自动化认证
C:\PS>send-mailmessage -to "User01 <user01@example.com>" -from "ITGroup <itdept@example.com>" -cc "User02 <user02@example.com>" -bcc ITMgr <itmgr@example.com> -subject "Don't forget today's meeting!" -credential domain01\admin01 -useSSL
方法二:通过.Net提供的接口,解决了方法一的缺点
示例:
$From = "src@abc.com"
$To = "dest@abc.com"
$Subject = "TestSubject"
$Body = "TestBody"
$Body = "TestBody"
$smtpServer = "mail.muchost.com"
$smtpPort = 25
$username = "src@abc.com"
$password = "myPassword"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($From, $To, $Subject, $Body)
$SMTPClient = New-Object Net.Mail.SmtpClient($smtpServer, $SmtpPort)
$SMTPClient.EnableSsl = $false
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password);
$SMTPClient.Send($SMTPMessage)
本文介绍了使用Powershell发送邮件的两种方式,包括使用内置的Send-EmailMessage cmdlet及其缺点,以及利用.Net接口实现自动认证发送邮件的解决方案。
1013





