Я пытаюсь отправить электронное письмо с помощью PowerShell с помощью службы электронной почты Rack Space.Я должен добавить, что я парень из 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 char: 5 + $ SMTPClient.Send ($ emailMessage) + ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], 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
Я думаю, проблема в том, что PowerShell, будучи продуктом Microsoft, хочет использовать более безопасный метод аутентификации, чем PLAIN или LOGIN.,
Могу ли я заставить PowerShell использовать метод аутентификации, поддерживаемый RackSpace?Я рассматривал несколько решений, но они, похоже, основаны на C #, так как код не распознается PowerShell.