CDO.Messageによるメール送信
CDO.Messageによるメール送信
vbscriptからメールを送信する方法はいくつかあるけれど、標準機能でメールを送信することができるてCDO.Message(コラボレーション データ オブジェクト)を利用すると簡単です。
ただし、SMTPへのアクセスだけですので、メールの受信はできません。用途としてはスクリプトで監視しつつアラートをあげるとか、定型メールを定期的、もしくは一斉配信するなどでしょうか。
サンプルコード
手順としてはこれくらいでメール送信ができます。
3行目~6行目を見てもらうとわかるようにForm(送信元)、To(送信先)、Subject(件名)、TextBody(本文)のそれぞれを指定しています。
8行目から11行目は、環境によって不要になりますが、基本的にはメール送信する上で最低限設定しておく必要があるものです。
それぞのれ意味は下記の通りです
SMTPサーバーは、メール送信に使用するサーバーのホスト名、もしくはIPアドレスを指定し、ポートはデフォルトの25番ポートか、指定したSMTPサーバーで使用できるポートを指定します。
送信方法についてはおまじないみたいなもので、2 を指定します。この数字は、ネットワーク上のSMTPを利用するという意味で、SMTPサーバーとSMTPポートの値を参照するようになります。
Configuration.Feilds.itemで指定している http://schemas.microsoft.com/cdo/configuration/xxxxx には、上記で指定したnamespace(xxxxxの部分)以外もあります。例えば、下記のようなものがあります。
Gmailがテストにはちょうどよかった(SMTP認証とSSLが必要)ので、実際に下記コードで送信をして確認しました。サンプルのe-mailおよび、ユーザー/パスは変えていますので、試す際は自分のアカウントで置き換えてください。
※Gmailの場合、Fromがgmail.comでなくてもいいようです
サンプルコード
はじめのサンプルでは送信先に To 以外つかっていませんが、CC や BCC も設定できますし、複数のあて先に対しても送信できます。その他には、ファイル添付やHTMLメール、charsetを設定することもできます。
※指定できるcharsetは、MSDNのcharsetプロパティを参照
ちなみに、メールヘッダもいじることができます。サンプルコードやMSDNなどを参考にしてください。
サンプルコード
■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
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 など |
ちなみに、メールヘッダもいじることができます。サンプルコードや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
スポンサーサイト