プログラミング

PowerShellからGmail経由でメール送信する方法

-プログラミング

仕事でメール送信をするバッチを作る対応をしたのでメモ代わりの手順をまとめときます。

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アプリパスワードアプリパスワード作成したアプリパスワード
3SMTPサーバ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。

コードに誤りがあれば、エラーが表示されるはずなので、エラーを解消してください。

-プログラミング