2014年7月19日土曜日

Windows 標準の機能 (CDO.Message) でメールを送信する

CDO.Message を使って外部へメールを送信する方法です。
メールを送信する方法はいくつかありますが、CDO を選択する理由としては以下の場合になると思います。
  • VBA、VBScript を使ってメールを送信する。
  • SMTPサーバのポート465 (SMTP over SSL) を使う。

CDO.Message は SMTP over SSL (ポート465) の SMTP 認証方式を使います。TLS/STARTTLS (ポート587) の SMTP 認証方式には対応していないため、この場合は以下のエラーになります。
エラーメッセージ: -2147220973 転送においてサーバーに接続できませんでした。

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

VBScript もしくは Windows PowerShell から CDO.Message を使って Gmail へメールを送信するサンプルです。

VBScript の CDO.Message メール送信サンプル

Set msg = CreateObject("CDO.Message")
msg.From = 送信者アドレス
msg.To = 送信先アドレス
msg.Subject = "CDO.Message Mail by VBScript"
msg.TextBody = "Test Mail. " & vbTab & Now

uri = "http://schemas.microsoft.com/cdo/configuration/"
msg.Configuration.Fields.Item(uri & "sendusing") = 2
msg.Configuration.Fields.Item(uri & "smtpserver") = "smtp.gmail.com"
msg.Configuration.Fields.Item(uri & "smtpserverport") = 465
msg.Configuration.Fields.Item(uri & "smtpauthenticate") = 1
msg.Configuration.Fields.Item(uri & "smtpusessl") = true
msg.Configuration.Fields.Item(uri & "sendusername") = Googleユーザ名
msg.Configuration.Fields.Item(uri & "sendpassword") = Googleパスワード
msg.Configuration.Fields.Update
msg.Send

Windows PowerShell の CDO.Message メール送信サンプル

$msg = New-Object -ComObject CDO.Message
$msg.From = 送信者アドレス
$msg.To = 送信先アドレス
$msg.Subject = "CDO.Message Mail by Windows PowerShell"
$msg.TextBody = "Test Mail. " + [System.DateTime]::Now

$uri = "http://schemas.microsoft.com/cdo/configuration/"
$msg.Configuration.Fields.Item($uri + "sendusing") = 2
$msg.Configuration.Fields.Item($uri + "smtpserver") = "smtp.gmail.com"
$msg.Configuration.Fields.Item($uri + "smtpserverport") = 465
$msg.Configuration.Fields.Item($uri + "smtpauthenticate") = 1
$msg.Configuration.Fields.Item($uri + "smtpusessl") = $TRUE
$msg.Configuration.Fields.Item($uri + "sendusername") = Googleユーザ名
$msg.Configuration.Fields.Item($uri + "sendpassword") = Googleパスワード
$msg.Configuration.Fields.Update()
$msg.Send()

名前空間URLのフィールドについて

CDOEX の Namespace URL について
上記で使用した 名前空間URL (http://schemas.microsoft.com/cdo/configuration/) のフィールドについてまとめます。

■sendusing フィールドについて
CdoSendUsing Enum 定数を使います
  • cdoSendUsingPickup (1)
    ローカルのSMTP(ピックアップ・ディレクトリ)を使用する
  • cdoSendUsingPort (2)
    SMTP ポートに接続する
  • cdoSendUsingExchange (3)
    Microsoft Exchange を使用する

sendusing Field
http://msdn.microsoft.com/en-us/library/ms873037.aspx

CdoSendUsing Enum
http://msdn.microsoft.com/en-us/library/ms876415.aspx

■smtpauthenticate フィールドについて
CdoProtocolsAuthentication Enum 定数を使います

  • cdoAnonymous (0)
    認証しません
  • cdoBasic (1)
    Basic認証を使います
  • cdoNTLM (2)
    NTLM認証を使います

smtpauthenticate Field
http://msdn.microsoft.com/en-us/library/ms873042.aspx

CdoProtocolsAuthentication Enum
http://msdn.microsoft.com/en-us/library/ms870465.aspx

関連する資料のリンク

CDO.Message オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc421174.aspx

http://schemas.microsoft.com/cdo/configuration/ 名前空間
http://msdn.microsoft.com/en-us/library/ms526318.aspx

CDOEX Enumerations(URI のフィールド一覧)
http://msdn.microsoft.com/en-us/library/ms877952.aspx