IT関連

PowerShellでメール送信~Gmail編~

おはようございます。こんにちは。こんばんは。
ミッド(@mid_v_lab)です

唐突にPowerShellでメール送信したくなったので、作ってみました。

今回はGmailアカウントを利用したメール送信になります。(Yahooはなんかエラー出て上手く送信できず、切り分け中・・・)

下記の記事を参考にしています。(下記サイトで丁寧に記載されていますので、合わせて確認するとGoodです。)

↓作ったものはこちら↓

※変更の必要な個所をピンクで表現しています。

メール送信.ps1

#Fromアドレスの指定
$from = “(自分のメアド、*@gmail.com)
#宛先アドレスの指定
$to = “(送付先)
#メール件名の指定(任意)
$Subject = “testmail
#メール本文の指定(任意)
$body = “testmail
#SMTPサーバの指定
$smtp = “smtp.gmail.com”

#メール送信構成
$mail = New-Object System.Net.Mail.MailMessage(“$from”,”$to”)
$mail.Subject = $Subject
$mail.Body = $body
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding(“ISO-2022-JP”)

#メール送信
$SMTPClient = New-Object System.Net.Mail.SmtpClient($smtp, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“(Googleアカウント、@より前)“,”(アプリパスワード)“);
$SMTPClient.Send($mail)

#メール関連のリソース開放(念のため)
$SMTPClient.dispose()
$mail.dispose()

exit

GmailのSMTPサーバを利用して送信する場合、

  • 2段階認証をオン
  • アプリパスワードを発行

の設定がGoogleアカウント側に必要です。

特に特殊な申請が必要な訳ではないので、5分もあれば終わると思います。

ボタンをポチポチして完了です。

ピンクの変更部分を自分の環境に合わせた値に変更してもらえれば、それで動くかな~と思います。

これだけだとツマラナイので、処理が失敗した時にメール件名を変える機構も組み込んでみます。

↓作ったものはこちら↓

※変更の必要な個所をピンクで表現しています。

メール送信(エラー時件名変更).ps1

#Fromアドレスの指定
$from = “(自分のメアド、*@gmail.com)
#宛先アドレスの指定
$to = “(送付先)
#メール件名の指定(任意)
$Subject = “testmail
#メール件名の指定(任意)
$Subject_error = “【異常】testmail
#メール本文の指定(任意)
$body = “testmail
#SMTPサーバの指定
$smtp = “smtp.gmail.com”

#errorカウント
$err_count = @()

function MailSend {
#メール送信構成
$mail = New-Object System.Net.Mail.MailMessage(“$from”,”$to”)
if ($err_count){
$mail.Subject = $Subject_error
}
else{
$mail.Subject = $Subject
}

$mail.Body = $body
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding(“ISO-2022-JP”)

#メール送信
$SMTPClient = New-Object System.Net.Mail.SmtpClient($smtp, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“(Googleアカウント、@より前)“,”(アプリパスワード)“);
$SMTPClient.Send($mail)

#メール関連のリソース開放(念のため)
$smtpclient.dispose()
$mail.dispose()
}

$err_count += “error”
MailSend

exit

「$err_count = @()」で空の配列を作って置き、なんらかの処理で異常を検知した場合(作成ファイルサイズが0byte等)に、

「$err_count += “error”」で、エラーが発生したことを記録し、

メール送信時に、「$err_count」の変数が空か、そうでないかで、件名を変更しています。

ミッド
ミッド
ちょっと変更すれば、本文も宛先もエラー時に分岐可能です。

メール送信する部分は「function」で事前に定義しておくと便利ですね。

あとは、これを必要なスクリプトにコピペで張り付けてもいいですし、別だしして共有のモジュールとして呼び出しても良いです。

サーバとかに設置するなら、「hostname」とかを取得してきて、件名入れるとかが良いと思います。


Gmailは簡単にできましたが、Yahooメールは苦戦中。

コマンドラインでのメール送信を試してから、スクリプト化したいと思います。

PCに仕込んでも良いんですけど、なんかサーバ欲しくなったのでAWSにサーバでも構築してみたいと思います。

ではでは

にほんブログ村 サラリーマン日記ブログ IT系サラリーマンへ
PVアクセスランキング にほんブログ村