【问题标题】:sending email with gmail using powershell使用 powershell 使用 gmail 发送电子邮件
【发布时间】:2015-05-15 18:22:44
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 你检查过连接吗?
  • 是的,我可以远程登录端口

标签: powershell smtp gmail


【解决方案1】:

这对我有用:

$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 的默认安全设置阻止了连接,正如来自 Google 的自动消息所建议的那样。因此,只需按照消息中的说明启用“访问安全性较低的应用程序”即可。风险自负。 :)

更多信息在这里:http://petermorrissey.blogspot.ro/2013/01/sending-smtp-emails-with-powershell.html

【讨论】:

  • 我正在使用 powershell 版本 4 。运行此脚本后,我收到以下错误 ----- 使用“1”参数调用“发送”的异常:“SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.5.1需要身份验证。在“第 23 行 char:1 + $smtp.send($message) + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: ( :) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException
  • @kamleshbhatt 编辑了我的答案
【解决方案2】:

“SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。”

我最近在尝试通过我的 Gmail 帐户自动发送邮件时遇到了这个问题。我不喜欢允许“访问不太安全的应用程序”的选项。我想要前瞻性的安全性。于是我继续搜索。

我的解决方案是启用“两步”验证。这提供了一个更安全的解决方案,因为它为您的脚本提供了一个备用密码来访问您的帐户。

使用应用密码登录:
https://support.google.com/accounts/answer/185833

Stefan 的链接也有这个解决方案,但它被隐藏在 cmets 中,直到我自己通过搜索我的 Gmail 帐户找到它之后,我才在那里找到它。这就是我在这里发布它的原因。

【讨论】:

    【解决方案3】:

    使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 2020-07-12
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2016-10-25
      相关资源
      最近更新 更多