我正在尝试使用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无法识别该代码。
答案 0 :(得分:0)
正如MS .NET API浏览器指出的,“ System.Net.Mail.SmtpClient现在已过时API”。 “ SmtpClient及其类型网络设计不良,我们强烈建议您改用https://github.com/jstedfast/MailKit和https://github.com/jstedfast/MimeKit”
您可以尝试这个。