ExcelマクロVBA技術解説 | VBAでメール送信する(CDO:Microsoft Collaboration Data Objects) | Excelマクロの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2013-07-02

VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)


VBAでメール送信する方法はいろいろありますが、

ここでは、CDO(Microsoft Collaboration Data Objects)を使っての送信方法を解説します。

メール送信は、メーラーを使う方法や、フリーのDLLを使う方法等もありますが、

まずは、Windowsに標準であるCDOを使ってみましょう。


ただし、このCDOも環境によってはインストールされていない場合もあるようですが、

ほとんどのWindows環境で問題なく使えるはずです。

私もめったに使いませんので、自身の覚書も兼ねて掲載します。

事前バインディング

Microsoft CDO for Windows 2000 Library
これを参照設定し、
Dim 変数 As New CDO.Message


遅延バインディング(実行時バインディング)

Dim 変数 As Object
Set 変数 = CreateObject("CDO.Message")

以下は、事前バインディングでのサンプルコードです。

Sub sample()
  Dim objCDO As New CDO.Message
  With objCDO
    With .Configuration.Fields '設定項目
      .Item(CdoConfiguration.cdoSMTPServer) = "SMTPサーバ" 'SMTPサーバ名
      .Item(CdoConfiguration.cdoSendUsingMethod) = CdoSendUsing.cdoSendUsingPort '外部SMTP指定
      .Item(CdoConfiguration.cdoSMTPServerPort) = 25 'ポート
      .Item(CdoConfiguration.cdoSMTPConnectionTimeout) = 60 'タイムアウト
      .Item(CdoConfiguration.cdoLanguageCode) = CdoCharset.cdoShift_JIS '文字セット指定
      .Update '設定を更新
    End With
    With .Fields
      '重要度、通常は以下のどちらかで良い
      .Item("urn:schemas:mailheader:X-Priority") = 1
      .Item("urn:schemas:mailheader:X-MsMail-Priority") = "High"
      .Update '設定を更新
    End With
    .MDNRequested = True '開封確認
    .MimeFormatted = True 'MIMEを使って書式設定
    .From = "送信元メールアドレス"
    .To = "宛先メールアドレス"
    .Subject = "テスト"
    .TextBody = "本文"
    .Send '送信
  End With
  Set objCDO = Nothing
End Sub


上記の太字部分は、最低限変更すべき箇所です、メールアドレスは当然ですね。

なかなか資料もそろいませんが、各プロパティ・メソッドについてまとめておきます。

CDOのプロパティ

名前 説明
Attachments The Attachments property specifies the collection of attachments for this message.
This property is read-only.
Attachmentsの資産は、このメッセージのために付属品のコレクションを指定します。
この資産はリードオンリーです。
AutoGenerateTextBody Indicates whether the TextBody of a message should automatically be generated from the contents of the HTMLBody property for a multipart/alternative message.
メッセージのTextBodyがマルチパート/代わりのメッセージのためにHTMLBodyの資産の内容から自動的に発生しなければならないかどうか示します。
BCC The blind carbon copy (Bcc) recipients for this message.
このメッセージのためのブラインド・カーボンコピー(Bcc)受取人。
BodyPart The IBodyPart interface on this object. This property is read-only.
IBodyPartは、この物の上で結びつきます。この資産はリードオンリーです。
CC The informational carbon copy (Cc) recipients for this message.
このメッセージのための情報のカーボンコピー(Cc)受取人。
Configuration The Configuration object for the message.
メッセージのConfiguration対象。
DataSource The IDataSource interface on this object.
This property is read-only.
IDataSourceは、この物の上で結びつきます。
この資産はリードオンリーです。
DSNOptions The Delivery Status Notification (DSN) options for the message.
メッセージのためのDelivery Status Notification(DSN)オプション。
EnvelopeFields The SMTP and Network News Transfer Protocol (NNTP) envelope fields of the message.
This property is read-only.
SMTPとメッセージのNetwork News Transfer Protocol(NNTP)封筒分野。
この資産はリードオンリーです。
Fields The Fields collection for the object. This property is read-only.
物のためのフィールズ収集。この資産はリードオンリーです。
FollowUpTo The newsgroups to which any responses to this message should be posted.
このメッセージへのどんな反応でも掲示されなければならないニュースグループ。
From The e-mail addresses of the principal author or authors of this message.
このメッセージの主要な著者または著者の電子メール・アドレス。
HTMLBody The HTML representation of the message.
メッセージのHTML代表。
HTMLBodyPart The BodyPart object containing the HTML representation of the message.
This property is read-only.
BodyPartは、メッセージのHTML代表を含んで反対します。
この資産はリードオンリーです。
Keywords A list of keywords for this message.
このメッセージのキーワードのリスト。
MDNRequested Indicates whether a Mail Delivery Notification (MDN) report is requested for a message.
Mail Delivery Notification(MDN)報告がメッセージのために要請されるかどうか示します。
MimeFormatted Indicates whether or not this message is to be formatted using the Multipurpose Internet Mail Extensions (MIME) formatting scheme.
このメッセージが計画をフォーマット化している多目的インターネットメール拡張仕様(MIME)を使って書式を設定されることになっているかどうか示します。
Newsgroups The newsgroup recipients for the message.
メッセージのためのニュースグループ受取人。
Organization Contains a description of the organization to which the sender belongs.
送り主が属する組織の説明を含みます。
ReceivedTime The date/time this message was delivered to the server.
This property is read-only.
このメッセージがそうであった日付/時間は、サーバーに配達しました。
この資産はリードオンリーです。
ReplyTo The address to which replies should be sent.
返事が送られなければならないアドレス。
Sender The address of the user or agent that actually submits the message.
メッセージを実際に提出するユーザーまたはエージェントのアドレス。
SentOn The date/time this message was submitted to the server.
This property is read-only.
このメッセージがそうであった日付/時間は、サーバーを受け入れました。
この資産はリードオンリーです。
Subject The subject of the message.
メッセージの対象。
TextBody The plain text representation of the body of this message.
このメッセージの本文のプレーンテキスト代表。
TextBodyPart Returns a body part object containing the text content of this message.
This property is read-only.
このメッセージのテキスト内容を含んでいる部位物を返します。
この資産はリードオンリーです。
To Contains a list of principal (To) recipients for this message.
このメッセージのために校長(ために)受取人のリストを含みます。

※下段の日本語は、自動翻訳したものです。

CDOのメソッド

名前 説明
AddAttachment Adds an attachment to this message.
付属品をこのメッセージに加えます。
AddRelatedBodyPart The AddRelatedBodyPart method adds a BodyPart object that is referenced by content in the HTML body of the message.
AddRelatedBodyPart方法は、メッセージのHTML本文で内容によってリファレンスをつけられるBodyPart物を加えます。
CreateMHTMLBody The CreateMHTMLBody method converts the contents of an entire Web page into a MIME Encapsulation of Aggregate HTML Documents (MHTML) formatted message body.
CreateMHTMLBody方法は、全てのウェブページの内容をAggregate HTML Documents(MHTML)書式を設定されたメッセージ体のMIME Encapsulationに変えます。
Forward The Forward method creates and returns another message that can be used to forward this message.
Forward方法は、このメッセージを進めるのに用いられることができるもう一つのメッセージを作成して、返します。
GetInterface Returns the specified dual interface on the object.
物の上に指定された二重インターフェースを返します。
GetStream The GetStream method returns this message in serialized (wire-transport) format in a Microsoft? ActiveX? Data Objects (ADO) Stream object.
GetStream方法は、Microsoft?ActiveX?Data Objects(ADO)Stream物で、順番に並べられた(ワイヤー-輸送)フォーマットで、このメッセージを返します。
Post The Post method posts this message to the specified newsgroups.
ポースト方法は、指定されたニュースグループにこのメッセージを送ります。
PostReply The PostReply method creates and returns another message that can be used to post a reply to this message.
PostReplyな方法は、このメッセージに対する返事を記録するのに用いられることができるもう一つのメッセージを作成して、返します。
Reply The Reply method creates and returns another message that can be used to reply to the sender of this message.
Replyな方法は、このメッセージの送り主に答えるのに用いられることができるもう一つのメッセージを作成して、返します。
ReplyAll The ReplyAll method creates and returns another message that can be used to reply to the sender and all recipients.
ReplyAll方法は、送り主とすべての受取人に答えるのに用いられることができるもう一つのメッセージを作成して、返します。
Send The Send method sends the message.
Send方法は、メッセージを送ります。

※下段の日本語は、自動翻訳したものです。

CDO.Configuration.Fields.Item

以下は初期状態の値です。

Item Value
0 languagecode
1 postusing
2 sendemailaddress
3 sendpassword
4 sendusername
5 senduserreplyemailaddress
6 sendusing
7 smtpaccountname
8 smtpauthenticate
9 smtpconnectiontimeout
10 smtpserver
11 smtpserverport
12 usemessageresponsetext
13 urn:schemas:calendar:timezoneid
CdoConfigurationのConstant
以下のValueは、先頭に
http://schemas.microsoft.com/cdo/configuration/
が付きます、つまり、
http://schemas.microsoft.com/cdo/configuration/autopromotebodyparts
のようになります。
Constant Value
cdoAutoPromoteBodyParts autopromotebodyparts
cdoFlushBuffersOnWrite flushbuffersonwrite
cdoHTTPCookies httpcookies
cdoLanguageCode languagecode
cdoNNTPAccountName nntpaccountname
cdoNNTPAuthenticate nntpauthenticate
cdoNNTPConnectionTimeout nntpconnectiontimeout
cdoNNTPServer nntpserver
cdoNNTPServerPickupDirectory nntpserverpickupdirectory
cdoNNTPServerPort nntpserverport
cdoNNTPUseSSL nntpusessl
cdoPostEmailAddress postemailaddress
cdoPostPassword postpassword
cdoPostUserName postusername
cdoPostUserReplyEmailAddress postuserreplyemailaddress
cdoPostUsingMethod postusing
cdoSaveSentItems savesentitems
cdoSendEmailAddress sendemailaddress
cdoSendPassword sendpassword
cdoSendUserName sendusername
cdoSendUserReplyEmailAddress senduserreplyemailaddress
cdoSendUsingMethod sendusing
cdoSMTPAccountName smtpaccountname
cdoSMTPAuthenticate smtpauthenticate
cdoSMTPConnectionTimeout smtpconnectiontimeout
cdoSMTPServer smtpserver
cdoSMTPServerPickupDirectory smtpserverpickupdirectory
cdoSMTPServerPort smtpserverport
cdoSMTPUseSSL smtpusessl
cdoURLGetLatestVersion urlgetlatestversion
cdoURLProxyBypass urlproxybypass
cdoURLProxyServer urlproxyserver
cdoUseMessageResponseText usemessageresponsetext

CDO.Fields.Item

以下は初期状態の値です。

Item Value
0 DAV:contentclass
1 http://schemas.microsoft.com/exchange/sensitivity
2 urn:schemas:httpmail:content-media-type
3 urn:schemas:httpmail:hasattachment
4 urn:schemas:httpmail:htmldescription
5 urn:schemas:httpmail:importance
6 urn:schemas:httpmail:priority
7 urn:schemas:httpmail:textdescription
8 urn:schemas:mailheader:content-class
9 urn:schemas:mailheader:content-transfer-encoding
10 urn:schemas:mailheader:content-type
11 urn:schemas:mailheader:importance
12 urn:schemas:mailheader:priority
13 urn:schemas:mailheader:thread-index

上記サンプルのように、
.Item("urn:schemas:mailheader:X-Priority") = 1
.Item("urn:schemas:mailheader:X-MsMail-Priority") = "High"
これで、初期で存在しない場合は追加されます。
ここでの項目は、メーラーに依存するようですので、
複数の環境でテストする必要があります。

その他のConstantやEnumについて

上記サンプルでは、
CdoSendUsing
CdoCharset
これらが使われています。
属するメンバーは事前バインディングしていれば、候補表示されます。
必要に応じて調べて使用して下さい。





同じテーマ「ExcelマクロVBA技術解説」の記事

Dictionary(ディクショナリー)連想配列の使い方について
Dictionary(ディクショナリー)のパフォーマンスについて
VBAでのInternetExplorer自動操作
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAで正規表現を利用する(RegExp)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点

新着記事 ・・・新着記事一覧を見る

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP