none
PowerShellでメール送信できなくなった RRS feed

  • 質問

  • 先日下記のようにスクリプトを作成し、PC(ローカル)からYahooメールまたはGmailをSMTPサーバーとして、会社のアドレスへ送信したところ、問題なく送受信できました。

    1週間後に同じスクリプトを実行しましたが、エラーが表示され送信できません。

    スクリプトは何も変更していませんが、なぜ送信できなくなったのか原因を教えてください。

    よろしくお願い致します。

    エラー内容は以下となります。

    "1" 個の引数を指定して "Send" を呼び出し中に例外が発生しました: "メールを送信できませんでした。"
    発生場所 行:1 文字:1
    + $client.Send($msg)
    + ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException

    SMTP_serverはヤフー(smtp.mail.yahoo.co.jp)またはGoogle(smtp.gmail.com)を利用しました。

    またヤフーの場合は、「$client.EnableSsl = $false」としてます。

    切り分けとして、ポートも465を試しています。

    $mail = @{
        from = "";
        to = "";
        smtp_server = "";
        smtp_port = 587;
        user = "";
        password = "";
    }
    $date = Get-Date -Format R
    $subject = "[THANATOS]System Shutdown Start."
    $body ="
    THANATOS System Shutdown is received.
    System is shutdown at $Date .
    
    This mail is auto-sent from Windows Server.
    "
    
    $client = New-Object Net.Mail.SmtpClient($mail["smtp_server"], $mail["smtp_port"])
    
    # GmailはSMTP + SSLで送信する
    $client.EnableSsl = $true
    
    # SMTP Authのため、認証情報を設定する
    $client.Credentials = New-Object Net.NetworkCredential($mail["user"], $mail["password"])
    
    $msg = New-Object Net.Mail.MailMessage($mail["from"], $mail["to"], $subject, $body)
    
    $client.Send($msg)

    2020年10月15日 14:35

すべての返信

  • 仮にスクリプトを実行した環境は同一(通信環境に影響がない)という前提ですと、最近二段階認証など有効にした覚えはないでしょうか。

    2段階認証などが有効になっている場合などにエラーになってしまうことがあるそうです。
    その場合はパスワードはアプリパスワードを使用すると回避できるそうです。
    https://support.google.com/accounts/answer/185833?hl=ja

    ユーザー名にメールアドレス全体を入れていたりというのもありがちなミスですね。
    あるいは別の方式、例えばSend-MailMessage コマンドレットを使うと、また違ったエラー情報が得られるかもしれません。
    $password = ConvertTo-SecureString $mail["password"] -AsPlainText -Force
    
    $credential = New-Object System.Management.Automation.PSCredential $mail["user"], $password
    
    Send-MailMessage -To $mail["to"] `
                     -From $mail["from"] `
                     -SmtpServer $mail["smtp_server"] `
                     -Credential $credential `
                     -Port $mail["smtp_port"] `
                     -Subject "subject" `
                     -Body "body: Hello Cmdlet" `
                     -Encoding UTF8 `
                     -UseSsl
    
    


    2020年10月16日 9:29
  • 2段階認証が有効になっておりました。その為、アプリパスワードを使用し、無事に送信できました。

    ご教授頂き、大変ありがとうございました。助かりました。

    2020年10月22日 14:53