2014年7月19日土曜日

[Windows] System.Net.Mail によるメール送信

System.Net.Mail を使って外部へメール送信する方法です。

VBA、VBScript のデフォルト状態では System.Net.Mail を使えません。
System.Net.Mail では TLS/STARTTLS (ポート587) の SMTP 認証方式を使います。SMTP over SSL (ポート465) には対応していないため、この場合は以下のエラーになります。
エラーメッセージ: 操作がタイムアウトしました。

System.Net.Mail がサポートする SMTP 認証方式について
http://msdn.microsoft.com/ja-jp/library/system.net.mail.smtpclient.enablessl.aspx
トランスポート層セキュリティを使用した安全な SMTP のための SMTP サービス拡張 (STARTTLS) のみをサポートします。
事前に SSL セッションが確立され、その後にプロトコル コマンドが送信されるという、代替接続方法もあります。 この接続方法は、SMTP/SSL、SMTP over SSL、または SMTPS と呼ばれることがあり、既定ではポート 465 を使用します。 SSL を使用するこの代替接続方法は、現在はサポートされていません。


Google のメールサーバ情報
https://support.google.com/mail/answer/13287

Windows PowerShell から System.Net.Mail を使って Gmail へメールを送信するサンプルです。

Windows PowerShell における System.Net.Mail メール送信サンプル

$mail = New-Object System.Net.Mail.MailMessage(送信者アドレス, 送信先アドレス)
$mail.Subject = "System.Net.Mail By Windows PowerShell"
$mail.Body = "Test Mail. " + [System.DateTime]::Now

$smtp = New-Object System.Net.Mail.SmtpClient
$smtp.Host = "smtp.gmail.com"
$smtp.Port = 587
$smtp.EnableSsl = $TRUE
$smtp.DeliveryMethod = [System.Net.Mail.SmtpDeliveryMethod]::Network
$smtp.Credentials = New-Object System.Net.NetworkCredential(Googleユーザ名, Googleパスワード)
$smtp.Send($mail)

関連する資料のリンク

System.Net.Mail 名前空間
http://msdn.microsoft.com/ja-jp/library/system.net.mail.aspx