PowerShell SmtpClient无法进行身份验证

时间:2019-01-19 13:51:20

标签: powershell smtpclient

我正在尝试使用Rack Space的emailsrvr服务通过PowerShell发送电子邮件。我应该补充,我是一个PHP专家,所以PowerShell超出了我的正常工作范围。代码如下(所有变量均设置在此代码段上方):

$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = $emailFrom

foreach ($addr in $emailTo) {
    $emailMessage.To.Add($addr)
}

$emailMessage.Subject = $subject
$emailMessage.Body = $emailContent

$smtpClient = New-Object System.Net.Mail.SmtpClient('smtp.emailsrvr.com', '587')
$smtpClient.UseDefaultCredentials = $false;
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass);

运行脚本时,出现以下错误:

  

使用“ 1”参数调用“发送”的异常:“事务失败。   服务器响应为:5.7.1:收件人   地址被拒绝:访问被拒绝“在C:\ my_test_script.ps1:24   字符数:5   + $ SMTPClient.Send($ emailMessage)   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:未指定:(:) [],MethodInvocationException       + FullyQualifiedErrorId:SmtpException

据我了解-这是因为SMTP客户端未通过RackSpace正确进行身份验证,并且中继被拒绝了。

我决定尝试telnet来了解什么:

220 smtp2.relay.ord1d.emailsrvr.com ESMTP - VA Code Section 18.2-152.3:1 forbids use of this system for unsolicited bulk electronic mail (Spam)
ehlo mydomain.com
250-smtp2.relay.ord1d.emailsrvr.com
250-SIZE 75000000
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 STARTTLS

我认为麻烦在于,作为Microsoft产品的PowerShell希望使用比PLAIN或LOGIN更安全的身份验证方法。

无论如何,我是否可以强制PowerShell使用RackSpace支持的auth方法?我正在查看一些解决方案,但是它们似乎是基于C#的,因为PowerShell无法识别该代码。

1 个答案:

答案 0 :(得分:0)

正如MS .NET API浏览器指出的,“ System.Net.Mail.SmtpClient现在已过时API”。 “ SmtpClient及其类型网络设计不良,我们强烈建议您改用https://github.com/jstedfast/MailKithttps://github.com/jstedfast/MimeKit

您可以尝试这个。