0

PowerShell プログラムの実行時に電子メールを送信するために使用する次のスクリプトがありますが、通常は非常にうまく機能します。

$msg = New-Object System.Net.Mail.MailMessage
        $msg.From = $from
        $msg.To.Add($to)
        $msg.Subject = $subject
        $msg.Body    = $html
        $msg.IsBodyHtml = $true

        $smtp = New-Object System.Net.Mail.SmtpClient($server)
        $smtp.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
        try
        {
            $smtp.Send($msg)
            Write-Host "Email sent to $to without error"        
        } 
        catch 
        {
            $retryCount++           
            Write-Warning "Email failed to send. $_.Exception.Message" 
                     }

問題は、セットアップしたばかりの VMWorkstation マシンでこのスクリプトを使用し始めてから、この時点で電子メールを送信できないことです。ここに私が得ているエラーがあります:

WARNING: Email failed to send. Exception calling "Send" with "1" argument(s): "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authent
icated".Exception.Message

以下を使用しているため、このエラーが発生していると思います。

$smtp.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

これは事実ですか?もしそうなら、VM から資格情報を取得する方法はありますか? ブリッジ ネットワークを使用しているため、その呼び出しでアクセスできなかった理由がわかりません。また、すべてのドメイン権限を企業ネットワークに変更しました。

どんな洞察も役に立ちます。

4

2 に答える 2

0

PowerShell v2 以降を使用している場合 (使用する必要があります)、Send-MailMessage代わりに使用してください。

Send-MailMessage -from $from -to $to -subject $subject -body $html -BodyAsHTML -smtphost $server -credential $(Get-Credential)

SMTP サーバーの資格情報を入力するよう求められます。繰り返し必要になる場合は、スクリプトの開始時にユーザーにプロンプ​​トを表示して保存できます。

$cred = Get-Credential

次に-credential $cred、の代わりに使用し-credential $(Get-Credential)ます。

-credential実行しているシステムがドメインに参加していて、ドメイン アカウントでログインしている場合は、現在のユーザー (あなた) がデフォルトになるため、パラメーターをスキップできるはずです。

于 2013-08-14T00:33:46.050 に答える