【VBA】CDOでメールを自動送信する方法(Outlook以外からも送信可能!マクロ)

4月 14, 2023

※当ブログではリンク先にプロモーションを含みます。

【VBA】CDOでメール送信する方法(メーラーインストールなし)

VBAでメールをメーラインストール無しで自動送信したい人
サーバからメール送信したいがサーバにメーラーがない人
Outlook以外から自動メール送信をしたい方人向けに書いています。

本記事の内容

Windows環境でCDO(Microsoft Collaboration Data Objects)によるVBAの自動メール送信方法を紹介します。

・CDO(Microsoft Collaboration Data Objects)によるVBA自動メール送信方法
・Yahooメールで自動送信する場合の送信設定方法
・Gmailで自動送信する場合の送信設定方法

 

業務効率化のためにWindows環境上でVBAの自動メール送信したいと思ったことはありませんか?
サーバや端末にメーラーをインストールしておらず、自動メール送信できないと思ったことはありませんか?

Windows環境からメーラーインストールなしでVBAによる自動メール送信する方法を紹介します。

 

もし、PCやサーバにインストールしているOutlookから自動メール送信したい場合は以下のリンクで送信方法を説明しています。
【VBA】Outlookから自動メール送信する方法について(Outlookインストール必要)

 

CDOとは

CDOとは「Microsoft Collaboration Data Objects」の略で、メッセージングアプリケーションやコラボレーションアプリケーションを構築するための技術です。 Windows環境には標準で搭載されており、特にインストールや設定は必要ありません。

 

VBAからCDO(Microsoft Collaboration Data Objects)で自動メール送信する方法

CDO(Microsoft Collaboration Data Objects)を使い、VBAでメール送信する方法を説明します。

今回、送信元メールアドレスはYahooのメールアドレスとGmailのメールアドレスで行います。(Outlookでも送信可能です)

以下にYahooメールとGmailの設定とVBAプログラムを記載します。

 

Yahooメールの場合の設定(IMAP/POP/SMTPアクセス設定)

Yahooメールからメールを自動送信する場合は以下の設定が必要になります。
以下の手順の設定が必要です。

1.Yahooメールの設定ボタンをクリックする
Yahooメールページへはこちら

 

2.「IMAP/POP/SMTPアクセス」をクリックして、「Yahoo! JAPAN公式サービス以外からのアクセスも有効にする」を選択する

 

3.IMAP、POP、SMTP項目をそれぞれ有効にして保存ボタンをクリックする

Yahooメール設定の詳しい説明はこちらをクリックください。
以後で出てくるSMTPサーバのパスワードはYahoo! JAPAN IDのパスワードです。

 

Gmailの場合の設定(セキュリティ設定)

Gmailからメールを自動送信する場合は以下の設定が必要になります。
Googleアカウントの「セキュリティ」で設定を行います。
Googleアカウント作成・ログインはこちらから行えます。

1.Googleセキュリティを開
Googleセキュリティはこちらから開けます。

 

2.「セキュリティ」から「Googleへのログイン」の「2段階認証プロセス」の順に開き、2段階認証(携帯番号での認証)の設定を行う

 

3.「セキュリティ」から「Googleへのログイン」の「アプリ パスワード」の設定を開く

 

4.アプリ名を入力する
目的を入力します。任意の名前ですので、「アプリ選択」をメール、「デバイス選択」をWindows パソコンとかで選択するとよいと思います。

 

5.パスワードが発行されるのでメモして完了ボタンを押す

 

VBAプログラム(CDO.Messageを利用)

CDOによるメール送信のVBAプログラムです。
標準機能でメール送信できるCDO.Messageを利用すると簡単に送信することができます。(SMTPへのアクセスだけですので、メールの受信はできません。)

Yahooメールの場合

  1. '*****************************************
  2. '* Yahooメール送信
  3. '*****************************************
  4. Sub YahooMailSend()
  5.     Dim objMail As Object
  6.     Dim fromMail As String
  7.     Dim toMail As String
  8.     Dim ccMail As String
  9.     Dim bccMail As String
  10.     Dim strMessage As String
  11.     Dim Subject As String
  12.     
  13.     'CODオブジェクトを取得
  14.     Set objMail = CreateObject(“CDO.Message")
  15.     
  16.     '送信元を指定
  17.     fromMail = “送信元メールアドレス"
  18.     '宛先を指定 ※送信アドレスが複数の場合はセミコロンで区切る
  19.     toMail = “送信宛先メールアドレス"
  20.     ccMail = “送信CC先メールアドレス"
  21.     bccMail = “送信BCC先メールアドレス"
  22.     
  23.     '件名を指定
  24.     Subject = “件名"
  25.     '本文を指定
  26.     strMessage = “メール本文"
  27.     strMessage = strMessage & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  28.     strMessage = strMessage & “※このメールはシステムから自動送信しています。" & vbCrLf
  29.     strMessage = strMessage & “"
  30.     
  31.     
  32.     '送信元メールアドレス
  33.     objMail.From = fromMail
  34.     
  35.     '送信先メールアドレス
  36.     objMail.to = toMail
  37.     objMail.cc = ccMail
  38.     objMail.bcc = bccMail
  39.     
  40.     '件名
  41.     objMail.Subject = Subject
  42.     
  43.     'メール本文
  44.     objMail.TextBody = strMessage
  45.     
  46.     '添付ファイル
  47.     objMail.AddAttachment “添付ファイルのファイルパス"
  48.     
  49.     '文字コード
  50.     objMail.TextBodyPart.Charset = “ISO-2022-JP"
  51.     '認証方法 1:Basic認証
  52.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  53.     'SMTPサーバの種類 1:内部SMTPサーバ 2:外部SMTPサーバ
  54.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  55.     'SMTPサーバのホスト名やIPアドレス
  56.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = “smtp.mail.yahoo.co.jp"
  57.     'SMTPサーバの送信用ポート番号
  58.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
  59.     'SSLを許可
  60.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
  61.     'SMTPサーバのユーザー名
  62.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername") = fromMail
  63.     'SMTPサーバのパスワード
  64.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword") = “SMTPサーバパスワード"
  65.     
  66.     '設定を更新
  67.     objMail.Configuration.Fields.Update
  68.     '送信
  69.     objMail.Send
  70.     
  71.     
  72.     Set objMail = Nothing
  73.     
  74. End Sub

17行目:送信元のメールアドレスを指定します
19行目:送信先のメールアドレスを指定します
20行目:CC先のメールアドレスを指定します
21行目:BCC先のメールアドレスを指定します
24行目:件名を指定します
26行目:本文を指定します
47行目:添付ファイルを指定します
56行目:SMTPサーバのホスト名やIPアドレスを指定します
58行目:SMTPサーバの送信用ポート番号を指定します
64行目:SMTPサーバのパスワードを指定します

スポンサーリンク

 

Gmailの場合

  1. '*****************************************
  2. '* Gmail送信
  3. '*****************************************
  4. Sub GmailSend2()
  5.     Dim objMail As Object
  6.     Dim fromMail As String
  7.     Dim toMail As String
  8.     Dim ccMail As String
  9.     Dim bccMail As String
  10.     Dim strMessage As String
  11.     Dim Subject As String
  12.     
  13.     'CODオブジェクトを取得
  14.     Set objMail = CreateObject(“CDO.Message")
  15.     
  16.     '送信元を指定
  17.     fromMail = “送信元メールアドレス"
  18.     '宛先を指定 ※送信アドレスが複数の場合はセミコロンで区切る
  19.     toMail = “送信宛先メールアドレス"
  20.     ccMail = “送信CC先メールアドレス"
  21.     bccMail = “送信BCC先メールアドレス"
  22.     
  23.     '件名を指定
  24.     Subject = “件名"
  25.     '本文を指定
  26.     strMessage = “メール本文"
  27.     strMessage = strMessage & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  28.     strMessage = strMessage & “※このメールはシステムから自動送信しています。" & vbCrLf
  29.     strMessage = strMessage & “"
  30.     
  31.     
  32.     '送信元メールアドレス
  33.     objMail.From = fromMail
  34.     
  35.     '送信先メールアドレス
  36.     objMail.to = toMail
  37.     objMail.cc = ccMail
  38.     objMail.bcc = bccMail
  39.     
  40.     '件名
  41.     objMail.Subject = Subject
  42.     
  43.     'メール本文
  44.     objMail.TextBody = strMessage
  45.     
  46.     '添付ファイル
  47.     objMail.AddAttachment “添付ファイルのファイルパス"
  48.     
  49.     '文字コード
  50.     objMail.TextBodyPart.Charset = “ISO-2022-JP"
  51.     '認証方法 1:Basic認証
  52.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  53.     'SMTPサーバの種類 1:内部SMTPサーバ 2:外部SMTPサーバ
  54.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  55.     'SMTPサーバのホスト名やIPアドレス
  56.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = “smtp.gmail.com"
  57.     'SMTPサーバの送信用ポート番号
  58.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
  59.     'SSLを許可
  60.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
  61.     'SMTPサーバのユーザー名
  62.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername") = fromMail
  63.     'SMTPサーバのパスワード
  64.     objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword") = “Googleアカウントアプリパスワード"
  65.     
  66.     '設定を更新
  67.     objMail.Configuration.Fields.Update
  68.     '送信
  69.     objMail.Send
  70.     
  71.     
  72.     Set objMail = Nothing
  73.     
  74. End Sub


17行目:送信元のメールアドレスを指定します
19行目:送信先のメールアドレスを指定します
20行目:CC先のメールアドレスを指定します
21行目:BCC先のメールアドレスを指定します
24行目:件名を指定します
26行目:本文を指定します
47行目:添付ファイルを指定します
56行目:SMTPサーバのホスト名やIPアドレスを指定します
58行目:SMTPサーバの送信用ポート番号を指定します
64行目:Googleアカウントのアプリパスワードを指定します

 

■注意点
本方法では送信履歴が残りません。
CCやBCCにご自身のメールアドレスも入れておくことをおすすめします。

本記事の方法はVBAの定期自動実行処理結果(処理完了やエラー)の通知メール送信時に使用できます。
以下のリンクで紹介していますので、もしよろしければこちらもご覧ください。
→「【VBA】定期自動起動処理のエラー対応処理(処理結果メール送信)

スポンサーリンク

 

まとめ

Windows環境上でメーラーインストールなしで自動メール送信する方法を紹介しました。
Outlook等のメールソフトのインストールなし(Outlookなし)でも送信することができます。
サーバ上で自動実行する際、サーバにメーラーのインストールされていないことはけっこうあると思います。
Windows環境上という条件はありますが。。
効率化のためのVBA自動実行処理の際、メールを送らなければならない場合、こちらのやり方で試してみてください。
最後まで拝見していただき、ありがとうございました。

 

定期的に自動でメール送信したい方は以下のリンクで定期自動実行方法を紹介していますので、ご覧ください。
→「ExcelVBA(マクロ)定期自動実行方法【batファイル VBScriptファイル タスクスケジューラ】


→「AccessVBA定期自動実行方法【batファイル vbsファイル タスクスケジューラ】

VBAでOutlookから自動メール送信する方法
【VBA】定期自動起動処理のエラー対応処理(処理結果メール送信)
も紹介していますので、もしよろしければ御覧ください。

 

また、「VBAからOracle Databaseに接続する方法」、
VBAからSQLServerに接続する方法」も紹介しています。
もしよろしければこちらも御覧ください。

 

¥1,604 (2024/02/27 05:40時点 | Amazon調べ)