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

VBAでメールをメーラインストール無しで自動送信したい人
サーバからメール送信したいがサーバにメーラーがない人
Outlook以外から自動メール送信をしたい方人向けに書いています。
「毎回同じ内容のメールを手作業で送るのが面倒だ」と感じたことはありませんか?
特に忙しい業務の中で、メール対応に多くの時間を取られるのは大きな負担ですよね。
また、VBAで自動メール送信を行いたいけれど、Outlookを使わずに実現したい方も多いのではないでしょうか。
しかし、環境によってはOutlookがインストールされていなかったり、別のメールシステムを使用したりする場合もあります。
そこで、VBAとCDOを使ったメール送信の自動化が役立ちます!ExcelやAccessのVBA・マクロからメールを自動送信する方法は、業務効率化に大きく貢献します。
この記事では、Outlookを使用せずにVBAを使ってCDO経由でメールを自動送信する具体的な手順を解説します。
本記事を読むことで、あなたは「メール業務を劇的に効率化できる方法」を手に入れ、他の重要な仕事に集中できるようになるでしょう。
最終的に、手間を減らし、業務全体をスムーズに進めるための第一歩を踏み出せます。
それでは早速、VBAとCDOを使った便利な自動化の世界を一緒に学んでいきましょう!
本記事の内容
Windows環境でCDO(Microsoft Collaboration Data Objects)によるVBAの自動メール送信方法を紹介します。
・Yahooメールで自動送信する場合の送信設定方法
・Gmailで自動送信する場合の送信設定方法
業務効率化のためにWindows環境上でVBAの自動メール送信したいと思ったことはありませんか?
サーバや端末にメーラーをインストールしておらず、自動メール送信できないと思ったことはありませんか?
Windows環境からメーラーインストールなしでVBAによる自動メール送信する方法を紹介します。
もし、PCやサーバにインストールしているOutlookから自動メール送信したい場合は以下のリンクで送信方法を説明しています。
→【VBA】Outlookから自動メール送信する方法について(Outlookインストール必要)
VBA メール送信の基礎知識
VBA(Visual Basic for Applications)を使ってメール送信を行うことで、ExcelやAccessなどのOfficeアプリケーションから自動的にメールを送信できます。
データ集計後の自動報告や、条件付きの通知など、様々な業務効率化に役立ちます。
VBAでのメール送信が必要な理由
なぜ VBA からメール送信が必要なのでしょうか?主な理由としては以下が挙げられます:
- 定期的なレポート配信の自動化
- 特定条件を満たした場合のアラート通知
- 大量のパーソナライズされたメールの一括送信
- 無人運転でのシステム監視と通知
これらの作業を手動で行うと多くの時間を要しますが、VBA を使って自動化することで作業効率が大幅に向上します。
Outlook以外でメール送信する利点
一般的に VBAでメール送信といえばOutlookを使う方法が最も簡単ですが、Outlookを使わない方法にも以下のような利点があります:
利点 | 説明 |
---|---|
環境依存の解消 | Outlook がインストールされていない環境でも動作する |
権限の問題回避 | Outlook のセキュリティ警告やアクセス許可の問題が発生しない |
多様なメールサーバー対応 | 社内メールサーバーや Gmail など様々なサーバーに対応可能 |
軽量な実行環境 | 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メールの場合
- '*****************************************
- '* Yahooメール送信
- '*****************************************
- Sub YahooMailSend()
- Dim objMail As Object
- Dim fromMail As String
- Dim toMail As String
- Dim ccMail As String
- Dim bccMail As String
- Dim strMessage As String
- Dim Subject As String
- 'CODオブジェクトを取得
- Set objMail = CreateObject(“CDO.Message")
- '送信元を指定
- fromMail = “送信元メールアドレス"
- '宛先を指定 ※送信アドレスが複数の場合はセミコロンで区切る
- toMail = “送信宛先メールアドレス"
- ccMail = “送信CC先メールアドレス"
- bccMail = “送信BCC先メールアドレス"
- '件名を指定
- Subject = “件名"
- '本文を指定
- strMessage = “メール本文"
- strMessage = strMessage & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
- strMessage = strMessage & “※このメールはシステムから自動送信しています。" & vbCrLf
- strMessage = strMessage & “"
- '送信元メールアドレス
- objMail.From = fromMail
- '送信先メールアドレス
- objMail.to = toMail
- objMail.cc = ccMail
- objMail.bcc = bccMail
- '件名
- objMail.Subject = Subject
- 'メール本文
- objMail.TextBody = strMessage
- '添付ファイル
- objMail.AddAttachment “添付ファイルのファイルパス"
- '文字コード
- objMail.TextBodyPart.Charset = “ISO-2022-JP"
- '認証方法 1:Basic認証
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
- 'SMTPサーバの種類 1:内部SMTPサーバ 2:外部SMTPサーバ
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
- 'SMTPサーバのホスト名やIPアドレス
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = “smtp.mail.yahoo.co.jp"
- 'SMTPサーバの送信用ポート番号
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
- 'SSLを許可
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
- 'SMTPサーバのユーザー名
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername") = fromMail
- 'SMTPサーバのパスワード
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword") = “SMTPサーバパスワード"
- '設定を更新
- objMail.Configuration.Fields.Update
- '送信
- objMail.Send
- Set objMail = Nothing
- End Sub
17行目:送信元のメールアドレスを指定します
19行目:送信先のメールアドレスを指定します
20行目:CC先のメールアドレスを指定します
21行目:BCC先のメールアドレスを指定します
24行目:件名を指定します
26行目:本文を指定します
47行目:添付ファイルを指定します
56行目:SMTPサーバのホスト名やIPアドレスを指定します
58行目:SMTPサーバの送信用ポート番号を指定します
64行目:SMTPサーバのパスワードを指定します
Gmailの場合
- '*****************************************
- '* Gmail送信
- '*****************************************
- Sub GmailSend2()
- Dim objMail As Object
- Dim fromMail As String
- Dim toMail As String
- Dim ccMail As String
- Dim bccMail As String
- Dim strMessage As String
- Dim Subject As String
- 'CODオブジェクトを取得
- Set objMail = CreateObject(“CDO.Message")
- '送信元を指定
- fromMail = “送信元メールアドレス"
- '宛先を指定 ※送信アドレスが複数の場合はセミコロンで区切る
- toMail = “送信宛先メールアドレス"
- ccMail = “送信CC先メールアドレス"
- bccMail = “送信BCC先メールアドレス"
- '件名を指定
- Subject = “件名"
- '本文を指定
- strMessage = “メール本文"
- strMessage = strMessage & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
- strMessage = strMessage & “※このメールはシステムから自動送信しています。" & vbCrLf
- strMessage = strMessage & “"
- '送信元メールアドレス
- objMail.From = fromMail
- '送信先メールアドレス
- objMail.to = toMail
- objMail.cc = ccMail
- objMail.bcc = bccMail
- '件名
- objMail.Subject = Subject
- 'メール本文
- objMail.TextBody = strMessage
- '添付ファイル
- objMail.AddAttachment “添付ファイルのファイルパス"
- '文字コード
- objMail.TextBodyPart.Charset = “ISO-2022-JP"
- '認証方法 1:Basic認証
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
- 'SMTPサーバの種類 1:内部SMTPサーバ 2:外部SMTPサーバ
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
- 'SMTPサーバのホスト名やIPアドレス
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver") = “smtp.gmail.com"
- 'SMTPサーバの送信用ポート番号
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
- 'SSLを許可
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
- 'SMTPサーバのユーザー名
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername") = fromMail
- 'SMTPサーバのパスワード
- objMail.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword") = “Googleアカウントアプリパスワード"
- '設定を更新
- objMail.Configuration.Fields.Update
- '送信
- objMail.Send
- Set objMail = Nothing
- End Sub
17行目:送信元のメールアドレスを指定します
19行目:送信先のメールアドレスを指定します
20行目:CC先のメールアドレスを指定します
21行目:BCC先のメールアドレスを指定します
24行目:件名を指定します
26行目:本文を指定します
47行目:添付ファイルを指定します
56行目:SMTPサーバのホスト名やIPアドレスを指定します
58行目:SMTPサーバの送信用ポート番号を指定します
64行目:Googleアカウントのアプリパスワードを指定します
本方法では送信履歴が残りません。
CCやBCCにご自身のメールアドレスも入れておくことをおすすめします。
本記事の方法はVBAの定期自動実行処理結果(処理完了やエラー)の通知メール送信時に使用できます。
以下のリンクで紹介していますので、もしよろしければこちらもご覧ください。
→【VBA】定期自動起動処理のエラー対応処理(処理結果メール送信)
メール送信時の注意点
VBA を使ってメールを送信する際には、いくつかの重要な注意点があります。
ここでは、セキュリティ対策、エラーハンドリング、添付ファイルの扱い方について解説します。
セキュリティ対策
メール送信時に考慮すべきセキュリティ対策:
- パスワードやアカウント情報をコード内にハードコーディングしない
- SSL/TLS による暗号化通信を使用する
- 送信者のメールアドレスを偽装しない(SPF などの認証に失敗する可能性がある)
- 機密情報を含むメールの暗号化を検討する
- 不要なメールの大量送信を避け、スパムフィルターに引っかからないようにする
パスワードの安全な管理方法として、環境変数や暗号化されたファイルから読み込む方法などがあります。
エラーハンドリング
メール送信時には様々なエラーが発生する可能性があります。エラーハンドリングを実装することをお勧めします。
また、エラーログを記録する機能を追加することで、問題の診断や追跡が容易になります。
エラーハンドリング時にエラー通知メールを送信することもできます。以下のリンクで紹介していますので、もしよろしければこちらもご覧ください。
→【VBA】定期自動起動処理のエラー対応処理(処理結果メール送信)
添付ファイルの扱い方
添付ファイルを送信する際の注意点:
- 添付ファイルの存在確認を行う
- 添付ファイルのサイズ制限に注意する
- 多数の添付ファイルがある場合は ZIP 圧縮を検討する
- 実行ファイル(.exe など)の添付はセキュリティフィルターにブロックされる可能性がある
まとめ
VBAでのメール送信を自動化する方法を学ぶことで、日々の業務をもっと効率化できると感じませんか?
本記事では、CDOを活用したシンプルなメール送信の仕組みをわかりやすく解説しました。Windows環境上でメーラーインストールなしで自動メール送信する方法です。
Outlook等のメールソフトのインストールなし(Outlookなし)でも送信することができます。
サーバ上で自動実行する際、サーバにメーラーのインストールされていないことはけっこうあると思います。Windows環境上という条件はありますが。。
効率化のためのVBA自動実行処理の際、メールを送らなければならない場合、こちらのやり方で試してみてください。
自動化が進むことで、手作業の負担を減らし、本当に重要な業務に集中できるようになります。
ぜひ今回の知識を実践して、作業の効率を向上させてみてください!
最後まで拝見していただき、ありがとうございました。
定期的に自動でメール送信したい方は以下のリンクで定期自動実行方法を紹介していますので、もしよろしければご覧ください。
→ExcelVBA(マクロ)定期自動実行方法【batファイル VBScriptファイル タスクスケジューラ】
→AccessVBA定期自動実行方法【batファイル vbsファイル タスクスケジューラ】
VBAでOutlookから自動メール送信する方法を以下のリンクで紹介しています。
もしよろしければご覧ください。
→VBAでOutlookから自動メール送信する方法
VBAからOracle Databaseに接続する方法を以下のリンクで紹介しています。
もしよろしければご覧ください。
→VBA(マクロ)でOracle Databaseに接続する方法【オラクルデータベース接続】
VBAからSQLServerに接続する方法を以下のリンクで紹介しています。
もしよろしければご覧ください。
→VBAでSQL Serverに接続する方法【SQLサーバーデータベース(DB)接続】


最近のコメント