Существует ли опция встроенной защиты = SSPI для Send-MailMessage? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть таблица, в которой хранятся переменные / значения электронной почты, которые вызываются через запросы powershell в моем скрипте.

Send-MailMessage -From $From_Email -To $To_Email -Subject $Job_Success_Email_Subject -Body $Email_Body -SmtpServer $SmtpServer -port $SmtpPort -Credential $SmtpCredentials -usessl

Меня в основном интересуют учетные данные имени пользователя / пароля, передаваемые из БД, но я получаю эту ошибку при использовании Get-Credential:

$SmtpCredentials = Get-Credential

Отправить-MailMessage: SMTP-сервер требует безопасного соединения, или клиент не был аутентифицирован.Ответ сервера: Требуется аутентификация

, если вместо этого я передаю свои учетные данные из БД следующим образом:

$SmtpPassword = $SmtpPassword | ConvertTo-SecureString -AsPlainText -Force

$SmtpCredentials = New-Object System.Management.Automation.PSCredential($SmtpUser,$SmtpPassword)

Примечание: пароль НЕ зашифрован на данный момент только для целей тестирования!

я получаю эти 2 ошибки:

New-Object: Не удается найти перегрузку для "PSCredential" и счетчика аргументов: "2".

и затем я получаю всплывающий логин Credential, и если я ничего не ввожу, я получаю эту ошибку:

Send-MailMessage: Невозможно проверить аргумент для параметра 'Credential'.Аргумент нулевой или пустой.Укажите аргумент, который не является пустым или пустым, а затем повторите команду.

Если я введу учетные данные вручную, я получу это вместо:

Send-MailMessage: SMTP-сервер требует безопасного соединения или клиент не прошел проверку подлинности.Ответ сервера: Требуется аутентификация

Я знаю, что эта ошибка обсуждалась и отвечала на вопросы, но я рассмотрел все возможные решения, такие как usessl и ConvertTo-SecureString -AsPlainText -Force, но она не работает.Я также попробовал [string][ValidateNotNullOrEmpty()]$SmtpPassword, но это, похоже, тоже не дало результата.

Итак, чтобы убедиться, что проблема не связана с самими учетными данными, я хотел бы протестировать что-то вроде Integrated Security=SSPI, как позволяет строка подключения sql, но для команды Send-Mail

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я выяснил проблему!

, поэтому очевидно, что идентификатор (имя пользователя), который я использовал, не был в группе Active Directory.поэтому я использовал другой идентификатор, который был в группе AD, и он работал!

например:

Я пишу сценарии в среде Dev и подумал, что мне просто нужно использовать Dev ID и пароль, которыйне сработало, что бы я ни пытался.

Я попробовал ID / пароль тестовой среды, который был недавно построен / запрошен для добавления в группу AD в сценарии, который я пишу в Dev, и это сработало!

0 голосов
/ 19 сентября 2018

Вы должны использовать объект System.Net.NetworkCredential для передачи учетных данных.Между тем попробуйте это.он работает безупречно каждый раз.

Function Send-Email {
    Param (
        [Parameter(`
            Mandatory=$true)]
        [String]$SendTo,
        [Parameter(`
            Mandatory=$true)]
        [String]$Subject,
        [Parameter(`
            Mandatory=$true)]
        [String]$Body,
        [Parameter(`
            Mandatory=$true)]
        [String]$EmailFrom="abc@123.com",  #This gives a default value to the $EmailFrom command
        [Parameter(`
            mandatory=$false)]
        [String]$attachment,
        [Parameter(`
            mandatory=$true)]
        [String]$Password
    )

        $SMTPServer = "smtp.gmail.com" 
        $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$SendTo,$Subject,$Body)
        if ($attachment -ne $null) {
            $SMTPattachment = New-Object System.Net.Mail.Attachment($attachment)
            $SMTPMessage.Attachments.Add($SMTPattachment)
        }
        $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
        $SMTPClient.EnableSsl = $true 
        $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom.Split("@")[0], $Password); 
        $SMTPClient.Send($SMTPMessage)
        Remove-Variable -Name SMTPClient
        Remove-Variable -Name Password

}

Вызов с использованием

Send-EMail -SendTo "him@hotmail.com" -Body "Test Body" -Subject "Test Subject" -attachment "C:\something.pdf" -password "Password"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...