使用PowerShell发送Gmail邮件

3
我将尝试使用 Powershell 脚本通过 Gmail SMTP 服务器发送电子邮件,但是我无法成功发送邮件。以下是我使用的脚本-
$EmailFrom = "bttpm@gmail.com"

$EmailTo = "kamlesh.bhatt@domain.com" 

$Subject = "Notification from XYZ" 

$Body = "this is a notification from XYZ Notifications.." 

$SMTPServer = "smtp.gmail.com" 

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 

$SMTPClient.EnableSsl = $true 

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("bttpm", "Password"); 

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

你检查过连接了吗? - Gerald Hughes
是的,我可以使用 Telnet 连接该端口。 - kamlesh bhatt
3个回答

9
这对我有用:
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$Username = "username@gmail.com"
$Password = ""

$to = "user1@domain.com"
$cc = "user2@domain.com"
$subject = "Email Subject"
$body = "Insert body text here"
$attachment = "C:\test.txt"

$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.cc.add($cc)
$message.from = $username
$message.attachments.add($attachment)

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host "Mail Sent"

然而,您可能会收到以下错误信息:
"The SMTP server requires a secure connection or the client was not authenticated. 
The server response was: 5.5.1 Authentication Required. "

这是因为Gmail的默认安全设置会阻止连接,正如谷歌自动消息所建议的那样。因此,请遵循消息中的说明并启用“允许不安全的应用程序访问”。自担风险。 :)
更多信息请参见:http://petermorrissey.blogspot.ro/2013/01/sending-smtp-emails-with-powershell.html

1
我正在使用 PowerShell 版本 4。 运行这个脚本后,我得到了以下错误—— 异常调用“Send”与“1”参数:“SMTP 服务器需要安全连接或客户端未经身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息,请访问”第23行字符:1
  • $smtp.send($message)
  • CategoryInfo:NotSpecified:()[],MethodInvocationException
  • FullyQualifiedErrorId:SmtpException
- kamlesh bhatt
@kamleshbhatt 修改了我的答案。 - Gerald Hughes

2
"SMTP服务器需要安全连接或客户端未经身份验证。服务器响应为:5.5.1 要求身份验证。"
最近我尝试通过我的Gmail帐户自动发送邮件时遇到了这个问题。我不喜欢允许“较不安全的应用程序访问”的选项,我想要更具前瞻性的安全解决方案。因此,我继续寻找解决方法。
我的解决方案是启用“双重验证”。这提供了稍微更加安全的解决方案,因为它为您的脚本提供了另一个密码来访问您的帐户。
使用应用程序密码进行登录:
https://support.google.com/accounts/answer/185833 Stefan的链接中也有这个解决方案,但它被埋在评论中,直到我通过搜索我的Gmail帐户才发现它。这就是我在这里发布它的原因。"

1
使用PowerShell发送带附件的电子邮件 -
    $EmailTo = "udit043.ur@gmail.com"  // abc@domain.com
    $EmailFrom = "udit821@gmail.com"  //xyz@gmail.com
    $Subject = "zx"  //subject
    $Body = "Test Body"  //body of message
    $SMTPServer = "smtp.gmail.com" 
    $filenameAndPath = "G:\abc.jpg"  //attachment
    $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
    $attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
    $SMTPMessage.Attachments.Add($attachment)
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("udit821@gmail.com", "xxxxxxxx");    // xxxxxx-password
    $SMTPClient.Send($SMTPMessage)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接