【问题标题】:Can I use TLS with Send-MailMessage cmdlet?我可以将 TLS 与 Send-MailMessage cmdlet 一起使用吗?
【发布时间】:2022-02-26 17:53:43
【问题描述】:

我正在尝试使用 PowerShell 发送电子邮件,但需要使用 TLS。有什么方法可以使用 Send-MailMessage cmdlet 做到这一点?

这是我的代码:

$file = "c:\Mail-content.txt"

if (test-path $file)
{

    $from = "afgarciact@gmail.com"
    $to = "<slopez@comfama.com.co>","<carloscu@comfama.com.co>"
    $pc = get-content env:computername
    $subject = "Test message " + $pc
    $smtpserver ="172.16.201.55"
    $body = Get-Content $file | Out-String


[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { return $true }

     foreach ($recipient in $to)
    {
        write-host "Sent to $to"
        Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject  -bodyAsHtml $body -Encoding ([System.Text.Encoding]::UTF8)
    }



}
else
{
write-host "Configuración"
}

非常感谢!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    确保您指定-UseSsl 开关:

    Send-MailMessage -SmtpServer $smtpserver -UseSsl -From $from -To $recipient -Subject $subject -BodyAsHtml $body -Encoding ([System.Text.Encoding]::UTF8)
    

    如果 SMTP 服务器使用 SMTP over TLS 的特定端口,请使用 -Port 参数:

    Send-MailMessage -SmtpServer $smtpserver -Port 465 -UseSsl -From $from -To $recipient -Subject $subject -BodyAsHtml $body -Encoding ([System.Text.Encoding]::UTF8)
    

    如果您想确保始终协商 TLS(而不是 SSL 3.0),请在 ServicePointManager 类上设置 SecurityProtocol 属性:

    [System.Net.ServicePointManager]::SecurityProtocol = 'Tls,TLS11,TLS12'
    

    【讨论】:

    • 但它说的是 SSL。它是否使用 TLS 代替?
    • 它协商服务器提供的任何内容,默认情况下是 TLS 1.0 或 SSL 3.0 中的最高值
    • 我明白了。那么,如果是 Office 365,那将使用 TLS 1.2,对吗?
    • @Checho 不,默认情况下只有 SSL3 或 TLS 1.0(尽管 O365 不再支持 SSL 3.0 afaik)。如果 O365 仅提供 TLS 1.1 和 1.2,您必须设置 SecurityProtocol 属性,更新答案
    • 我试过了,但得到了这个错误:异常设置“SecurityProtocol”:“由于枚举值无效,无法将值“Tls12”转换为类型“System.Net.SecurityProtocolType”。指定以下之一枚举值,然后重试。可能的枚举值为“Ssl3,Tls”。”
    【解决方案2】:

    我整天都在和这个作斗争。对我的修复最终需要先在单独的行中运行它,然后我才能运行我的 Send-MailMessage 命令:

    [System.Net.ServicePointManager]::SecurityProtocol = 'Tls,TLS11,TLS12'
    

    感谢您的建议!

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2020-08-04
      • 2018-10-23
      • 2011-02-22
      • 2021-03-16
      • 2016-11-20
      • 2019-01-25
      • 2011-06-11
      • 2017-02-20
      相关资源
      最近更新 更多