【问题标题】:send-MailMessage not working发送邮件消息不起作用
【发布时间】:2014-09-16 17:55:02
【问题描述】:

我在 PowerShell 版本 2 中使用 send-MailMessage cmdlet,它给了我一个错误。

我尝试使用之前帖子中提到的所有选项,但对我没有帮助。

这是我正在使用的命令:

send-MailMessage -from "abc@gmail.com" -to "def@gmail.com" 
                 -subject "test" -body"test" -smtp "smtp.gmail.com" 

我收到一个错误:

Send-MailMessage : SMTP 服务器需要安全连接或客户端未通过身份验证
e 是:5.7.0 必须首先发出 STARTTLS 命令。 l46sm12283804qgd.27 - gsmtp
在行:1 字符:17
+ 发送邮件消息 凭证 abc
+ CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Se
离子
+ FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

我尝试使用 UseSsl= true 并提供凭据,即使这样我也无法发送电子邮件。你能告诉我我在这里缺少什么吗?

【问题讨论】:

    标签: powershell-2.0


    【解决方案1】:

    为了使用 gmail 你需要 SSL,我不确定你可以使用 Send-MailMessage 试试这个:

    $emailSmtpServer = "smtp.gmail.com"
    $emailSmtpServerPort = "587"
    $emailSmtpUser = "yourlogin@gmail.com"
    $emailSmtpPass = "yourPassword"
    
    $emailMessage = New-Object System.Net.Mail.MailMessage
    $emailMessage.From = "yourlogin@gmail.com"
    $emailMessage.To.Add("YourSendTo@mail.com")
    $emailMessage.Subject = "Small mail for a friend"
    $emailMessage.IsBodyHtml = $true
    $emailMessage.Body = @"
    <p><strong>Hello me</strong>.</p>
    <p>It seems to work</p>
    <p>JP</p>
    "@
    
    $SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
    $SMTPClient.EnableSsl = $true
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
    
    $SMTPClient.Send( $emailMessage )
    

    已编辑:

    要使用邮件附件,请查看Sytem.Net.Mail.MailMessage 文档。您需要先创建一个Attachment,然后将其添加到MailMessage Attacments 集合中。

    【讨论】:

    • 谢谢!!!它成功了。你能否告诉我如何将附件添加到同一命令中发送到电子邮件中。谢谢。
    【解决方案2】:

    对于后来的人,这是我的两个班轮示例,用于帐户“gmail-user@gmail.com”。这可以安排。

    $credentials = new-object Management.Automation.PSCredential “gmail-user@gmail.com”, (“gmail-user's password” | ConvertTo-SecureString -AsPlainText -Force)
    
    Send-MailMessage -From "gmail-user@gmail.com" -to "someone-else@gmail.com" -Subject "Some subject"
    -Body "Some body" -SmtpServer "smtp.gmail.com" -port 587 -UseSsl
    -Credential $credentials -Attachments "C:\an-attachment.txt"
    

    【讨论】:

    • 这仅适用于您的邮件服务器在端口 587 上支持 SSL(不要与 STARTTLS 混淆)。
    • 实际上不是... UseSsl 告诉 PowerShell 不要执行明文... 协商的 SSL 级别对默认值和自定义配置是开放的。如果邮件服务器需要 SSL 但也需要 TLS 1.2,那么仅设置 -UseSsl 不足以避免问题。
    • PowerShell 2.0 尚不支持 -Port for Send-MailMessage
    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2012-10-09
    • 2013-07-07
    • 2015-03-20
    相关资源
    最近更新 更多