以前、PowerShellからGmailを送信したことがありました。
Windowsでキーサインパーティに参加した時のまとめ & caffっぽいツールを作ってみた - メモ的な思考的な
読み返してみると、
System.Net.Mail
System.Web.Mail
を使っており、PowerShellのSend-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
のほうが良さそうです。
- c# - SmtpException: Unable to read data from the transport connection: net_io_connectionclosed - Stack Overflow
- プリンタ、スキャナ、アプリケーションからメールを送信するための Google Apps の SMTP 設定 - Google Apps 管理者 ヘルプ
環境
- Windows10 x64
- PowerShell v5.0
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