PowerShellを使って、SMTPでGmailを送信する

以前、PowerShellからGmailを送信したことがありました。
Windowsでキーサインパーティに参加した時のまとめ & caffっぽいツールを作ってみた - メモ的な思考的な

 
読み返してみると、

  • System.Net.Mail
  • System.Web.Mail

を使っており、PowerShellSend-MailMessageコマンドレットは使っていませんでした。

 
そこで今回は

  • System.Net.Mail
  • Send-MailMessage

を使ってメールを送信してみます。

 
メールまわりの情報は以下の通りとします。

$mail = @{
    from = "example@gmail.com";
    to = "example+to@gmail.com";
    smtp_server = "smtp.gmail.com";
    smtp_port = 587;
    user = "example@gmail.com";
    password = "1234";
}

 
なお、SMTPのポートについては、Gmailでは465よりも587のほうが良さそうです。

 

環境

 

System.Net.Mail版

$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: Hello Net class")

$client.Send($msg)

 

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

 

ソースコード

GitHubに置きました。send_gmail_by_smtpディレクトリ以下が今回のファイルです。
thinkAmi/PowerShell_misc: Misc collection of PowerShell code

 

参考