仕事でメール送信をするバッチを作る対応をしたのでメモ代わりの手順をまとめときます。
Gmailの準備
Gmailであらかじめ2段階認証プロセスを有効にします。
すでに対応済みであれば本手順はスキップでOK。管理者出ないとできないなど制約があるときは管理者に依頼してください。
1. Googleアカウントのセキュリティを開く
Googleアカウントを開き、サイドバーのセキュリティを選択する。
2. 2段階認証プロセスを開く
2段階認証プロセスをクリックして2 段階認証プロセス画面を開く。
3. 2段階認証を設定
使ってみるをクリックして画面に沿って2段認証を有効にする。
4. アプリパスワードを設定
セキュリティに戻り、アプリパスワードをクリックする。
アプリを選択でメールを選択する。
デバイスの選択でその他(名前を入力)を選択して任意の名前を入力する。
生成をクリックする。
生成したパスワードをメモする。
ポイント
パスワードはPowerShellで使うので必ずメモしておく。
メモせずに閉じてしまった場合はもう一回作成する。
PowerShellでGmailを送信
今回は、メール送信プログラムをPowerShellで作成し、コマンドプロンプトから実行する。
1. メール送信用のPS1ファイルを作成
以下コードをsendMail.ps1で保存する。
各項目の値は下表を参照
No | 項目 | 値 | 備考 |
---|---|---|---|
1 | メールアドレス | ログインメールアドレス | |
2 | アプリパスワード | アプリパスワード | 作成したアプリパスワード |
3 | SMTPサーバ | smtp.gmail.com | 詳細は公式サイトを参照 |
4 | ポート番号 | 587 | 詳細は公式サイトを参照 |
5 | 送信先アドレス | 送信先のメールアドレス | |
6 | 件名 | メールの件名 | |
7 | メール本文 | メールの本文 |
# メール送信
# Account
$AccountName = "1.メールアドレス"
$Password = "2.パスワード"
# connect
$SMTPClient = New-Object Net.Mail.SmtpClient("3.SMTPサーバ", 4.ポート番号)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$AccountName","$Password");
# mail
$MailFrom = "$AccountName"
$MailTo = "5.送信先アドレス"
$Subject = "6.件名"
$Body = "7.メール本文"
# send mail
$Message = New-Object Net.Mail.MailMessage($MailFrom, $MailTo, $Subject, $Body)
$SMTPClient.Send($Message)
以下、サンプルです(認証情報は伏せています)。
# メール送信
# Account
$AccountName = "xxxx@gmail.com"
$Password = "xxxx"
# connect
$SMTPClient = New-Object Net.Mail.SmtpClient("smtp.gmail.com", 587)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$AccountName","$Password");
# mail
$MailFrom = "$AccountName"
$MailTo = "xxxx@gmail.com"
# 複数送信先は以下のように配列で渡す
# $MailTo = @("a@gmail.com","b@gmail.com" )
$Subject = "PowerShellから送信"
$Body = "メール送信テスト"
# send mail
$Message = New-Object Net.Mail.MailMessage($MailFrom, $MailTo, $Subject, $Body)
$SMTPClient.Send($Message)
2. コマンドプロンプトで実行
コマンドプロンプトで作成したsendMail.ps1を実行する。
cd <ファイルを置いたディレクトリ>
powershell -File sendMail.ps1
例)
送信先でメールが受け取れていればOK。
コードに誤りがあれば、エラーが表示されるはずなので、エラーを解消してください。