使用 PowerShell 发送电子邮件

Marion Paul Kenneth Mendoza 2022年5月16日
使用 PowerShell 发送电子邮件

Windows PowerShell 是一个命令行 shell,用于解决 Windows 中的一些管理任务以及在此操作系统上运行的应用程序。通用脚本语言允许你定制 cmdlet 以执行特定功能。

发送电子邮件就是其中之一。本文将讨论使用 Windows PowerShell 发送电子邮件和处理此方法的其他方式。

在 PowerShell 中使用 Send-MailMessage Cmdlet 发送电子邮件

这是一个基于 Send-MailMessage cmdlet 的示例,你现在可以使用 SMTP 协议从 PowerShell 发送电子邮件。

Send-MailMessage -To "user@contoso.com" -From "user@abccompany.net"  -Subject "Hello!" -Body "This is important" -Credential (Get-Credential) -SmtpServer "smtp.gmail.com" -Port 587

我们只需要插入发件人和收件人的电子邮件地址,并指定我们要使用的 SMTP 服务器。

Send-MailMessage cmdlet 还允许你使用命令的许多参数在电子邮件中添加更多详细信息。这是我们可以使用 cmdlet 使用的参数列表。

参数 参数描述
-To 目标收件人的电子邮件地址。
-Bcc 将被 Blind Carbon 复制的电子邮件地址。
-Cc 将被碳复制的电子邮件地址。
-From 发件人或源电子邮件地址。
-Subject 电子邮件的主题。
-Body 电子邮件的正文。
-BodyAsHTML 表示电子邮件的正文具有 HTML 标记。
-Attachments 要附加到名称的文件名。
-Credential 用于发送电子邮件的凭据。
-SMTPServer SMTP 服务器的名称。
-Port SMTP 服务器端口。
-UseSSL 发送电子邮件时将使用安全套接字层 (SSL) 协议。

你可以先将参数值分配给变量,然后再将它们插入命令行以便于阅读。

$From = "user@abccompany.net"
$To = "user@contoso.com"
$Copy = "manager@contoso.com"
$Attachment = "C:\Temp\file.jpg"
$Subject = "Photos of Drogon"
$Body = "<br>Please see attached picture for reference."
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "465"

Send-MailMessage -From $From -to $To -Cc $Copy -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Port $SMTPPort -UseSsl -Credential (Get-Credential) -Attachments $Attachment

默认情况下,Send-MailMessage 命令尝试通过标准 SMTP 端口 TCP 25 发送电子邮件。

但是,假设你的 SMTP 服务器只允许使用加密协议发送电子邮件。在这种情况下,我们可以最频繁地指定端口号;它是 465 或 587 和 -UseSSL 开关参数。

下表显示了流行的公共电子邮件提供商的 SMTP 服务器参数列表,我们可以使用这些参数从 Windows PowerShell 发送消息(请注意,我们必须允许在帐户界面中通过 SMTP 发送电子邮件):

服务 SMTP 服务器 端口 连接
Gmail smtp.gmail.com 587 TLS
25 TLS
465 SSL
Office 365 smtp.office365.com 587 TLS
25 TLS
Outlook.com smtp-mail.outlook.com 587 TLS
25 TLS
雅虎邮箱 smtp.mail.yahoo.com 587 TLS
25 TLS
465 SSL
Windows Live Hotmail smtp.live.com 587 TLS
25 TLS
Zoho smtp.zoho.com 587 TLS
465 SSL
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn