用Powershell发邮件的两种方法

本文介绍了使用Powershell发送邮件的两种方式,包括使用内置的Send-EmailMessage cmdlet及其缺点,以及利用.Net接口实现自动认证发送邮件的解决方案。
Powershell支持发邮件,目前我找到两种方法,第一种方法是通过自带的Send-EmailMessage,但这个方法好像难以处理自动输入凭据的问题;第二个方法是通过.Net提供的接口,可以实现自动发邮件。

方法一:使用Send-EmailMessage功能
以下节选的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”。

方法一的缺点:凭据的处理比较麻烦。如果要输入凭据,要传入一个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"
     $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)




评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值