fc2ブログ

CDO.Messageによるメール送信

CDO.Messageによるメール送信

vbscriptからメールを送信する方法はいくつかあるけれど、標準機能でメールを送信することができるてCDO.Message(コラボレーション データ オブジェクト)を利用すると簡単です。
ただし、SMTPへのアクセスだけですので、メールの受信はできません。用途としてはスクリプトで監視しつつアラートをあげるとか、定型メールを定期的、もしくは一斉配信するなどでしょうか。

サンプルコード
Set objMail = CreateObject("CDO.Message")

objMail.From = "username@xxx.yy.zz"
objMail.To = "username@xxx.yy.zz"
objMail.Subject = "メール送信テスト"
objMail.TextBody = "CDO.Messageによるメール送信テスト"

objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mailhost"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMail.Configuration.Fields.Update

objMail.Send

Set objMail = Nothing
 
手順としてはこれくらいでメール送信ができます。
3行目~6行目を見てもらうとわかるようにForm(送信元)、To(送信先)、Subject(件名)、TextBody(本文)のそれぞれを指定しています。
8行目から11行目は、環境によって不要になりますが、基本的にはメール送信する上で最低限設定しておく必要があるものです。
それぞのれ意味は下記の通りです


[送信方法] .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")
[SMTPサーバー] .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")
[SMTPポート] .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")


SMTPサーバーは、メール送信に使用するサーバーのホスト名、もしくはIPアドレスを指定し、ポートはデフォルトの25番ポートか、指定したSMTPサーバーで使用できるポートを指定します。
送信方法についてはおまじないみたいなもので、2 を指定します。この数字は、ネットワーク上のSMTPを利用するという意味で、SMTPサーバーとSMTPポートの値を参照するようになります。
Configuration.Feilds.itemで指定している http://schemas.microsoft.com/cdo/configuration/xxxxx には、上記で指定したnamespace(xxxxxの部分)以外もあります。例えば、下記のようなものがあります。


[SSL通信をする/しない] smtpusessl = True/Flase
[SMTP認証] smtpauthenticate = 1(Basic認証)/2(NTLM認証)
[送信ユーザー名] sendusername = ユーザー名
[送信パスワード] sendpassword = パスワード
[タイムアウト] smtpconnectiontimeout = 接続がタイムアウトするまでの秒数


Gmailがテストにはちょうどよかった(SMTP認証とSSLが必要)ので、実際に下記コードで送信をして確認しました。サンプルのe-mailおよび、ユーザー/パスは変えていますので、試す際は自分のアカウントで置き換えてください。
※Gmailの場合、Fromがgmail.comでなくてもいいようです

サンプルコード
Set objMail = CreateObject("CDO.Message")

objMail.From = "username@gmail.com"
objMail.To = "username@gmail.com"
objMail.Subject = "SMTP認証、SSL通信によるメール送信テスト"
objMail.TextBody = "CDO.Messageを利用したSMTP認証、SSL通信によるメール送信テスト"

strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
With objMail.Configuration.Fields
   .Item(strConfigurationField & "sendusing") = 2
   .Item(strConfigurationField & "smtpserver") = "smtp.googlemail.com"
   .Item(strConfigurationField & "smtpserverport") = 465
   .Item(strConfigurationField & "smtpusessl") = True
   .Item(strConfigurationField & "smtpauthenticate") = 1
   .Item(strConfigurationField & "sendusername") = "username@gmail.com"
   .Item(strConfigurationField & "sendpassword") = "password"
   .Item(strConfigurationField & "smtpconnectiontimeout") = 60
   .Update
end With

objMail.Send

Set objMail = Nothing
 

はじめのサンプルでは送信先に To 以外つかっていませんが、CC や BCC も設定できますし、複数のあて先に対しても送信できます。その他には、ファイル添付やHTMLメール、charsetを設定することもできます。


[CC] <CDO.Message object>.CC メールアドレス
[BCC] <CDO.Message object>.Bcc メールアドレス
[ファイル添付] <CDO.Message object>.AddAttachment ファイルのフルパス
[HTMLメール] <CDO.Message object>.HTMLBody HTML文章
[charset] <CDO.Message object>.BodyPart.Charset iso-2022-jp,shift-jis,utf-8 など

※指定できるcharsetは、MSDNのcharsetプロパティを参照

ちなみに、メールヘッダもいじることができます。サンプルコードやMSDNなどを参考にしてください。

サンプルコード
Set objMail = CreateObject("CDO.Message")

objMail.From = "表示名 <username@xxx.yy.zz>"
objMail.To = "表示名1 <username1@xxx.yy.zz>;表示名2 <username2@xxx.yy.zz>"
objMail.Cc = "username@xxx.yy.zz"
objMail.Bcc = "username@xxx.yy.zz"
objMail.Subject = "メール送信テスト"
objMail.HtmlBody = "<html><body><i>CDO.Messageによるメール送信テスト</i></body></html>"
objMail.BodyPart.Charset = "utf-8"
objMail.AddAttachment "c:\test.txt"

objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mailhost"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMail.Configuration.Fields.Update

objMail.Fields("urn:schemas:mailheader:X-Mailer") = "vbscript mail"
objMail.Fields("urn:schemas:mailheader:Importance") = "High"
objMail.Fields("urn:schemas:mailheader:Priority") = 1
objMail.Fields("urn:schemas:mailheader:X-Priority") = 1
objMail.Fields("urn:schemas:mailheader:X-MsMail-Priority") = "High"
objMail.Fields.update

objMail.Send

Set objMail = Nothing
  ※priorityは、各ソフトによって拡張されたヘッダーがあるのでわかりにくいです。。。

■MSDNのCDO技術文書
 CDO for Windows 2000(英語)
  → http://msdn.microsoft.com/en-us/library/ms527568.aspx
 CDO Library(日本語)
  → http://msdn.microsoft.com/ja-jp/library/cc447340.aspx

■Hey, Scriptiong Guy!
 CDO を使用して送信メールにファイルを添付するにはどうすればよいでしょうか。
  → http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov04/hey1129.mspx

スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ