こんにちは
けいぞうです。
⇒ 前回(PowerShellでメールを送信する方法 その2)
前回はSMTPサーバーとしてOffice365(Exchange Online)を使ってPowerShellでメールを送信する方法を書きました。
私はこの方法を採用していますが、
以下のようにいくつか問題点というか、デメリットがあります。
- Office365のテナントを作る必要がある
- Exchangeを利用できるライセンスを付与したユーザーを作成する必要がある
- ライセンスが有料(ただし無料試用版があります。延長も再作成もできるので実質ずっと無料で使えますが、延長したり作り直すのが面倒くさい)
上記のデメリットを大体全てクリアするのが、
SMTPサーバーとしてGmailを使う方法です。
今のところ個人でメール送信アプリを作るならこの方法が決定版かなと思います。
以下、サンプルスクリプトです。
$EmailFrom = "送信元メールアドレス"
$EmailTo = "送信先メールアドレス"
$Subject = "件名"
$Body = "本文"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("Googleアカウント","アプリパスワード");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
前回記載したコマンドレットと全く同じで、SMTPサーバー名がGmailに置き換わるだけです。
ただし、Gmailでこのようにアプリでメールを送信するには以下2つの設定を行う必要があります。
- 2段階認証プロセスをONにする
- アプリパスワードを作成する
アプリで指定するパスワードはここで設定したパスワードにすることになります。
上記設定をしていないと以下のようなエラーメッセージが出力されて
送信できませんでした。
"4" 個の引数を指定して "Send" を呼び出し中に例外が発生しました: "SMTP サーバーにセキュリティで保護された接続が必要であるか、ま たはクライアントが認証されていません。 サーバーの応答:5.5.1 Authentication Required. Learn more at" 発生場所 行:1 文字:1 + $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException
メール送信をアプリで行うためには「アプリパスワード」を使用する必要があります。
アプリパスワードを生成して使用するためには2段階認証プロセスをONにする必要がある、ということのようです。
これでめでたく誰でも簡単に無料でPowerShellを使ってメール送信を行う
アプリを作ることができますね。
さあ、Googleアカウントをお持ちの方は
上記2つの設定を行なってPowerShellを起動してサンプルスクリプトをコピペしてみてください。
簡単にメールが送信できますよ。
最近のコメント