Access

AccessからVBAでメールを送信する2つの方法

VBAメール送信

Accessでデータを表示して、その内容をそのままメール送信できたらいいのにな。と思うことはありませんか?

これまで様々なツールを開発してきましたが、Accessデータベースの情報を元にメール送信したいというニーズはかなり多いです。

AccessではVBAで簡単なプログラムを書くだけでメール送信できる方法が2つあります

ニーズに合う方法で実装してください。

Microsoft Outlookを使って送信する

Access単体での実装ではなく、別ソフトウェア(Microsoft Outlook)を経由してメールを送信する方法です。

Outlookで送信するメリットとデメリット

メリットはプログラミングが簡単であること、Outlookに送信履歴が残ることが上げられます。

デメリットとしては他のメーラーを使っている場合、わざわざOutlookにメール設定をしなければならないという点です。

通常Outlookを使われている場合はメリットしかないということになりますね。

Outlookに複数アカウントが設定されていた場合は、既定のアカウントにて送信されます。既定以外のアカウントを指定する方法はありません。

前提条件(準備)

Outlookでメールが送受信できる状態であること

常時Outlookを使われている場合は問題ありませんが、インストールされているけど使っていない場合などは、メールが送受信できるようにアカウントを設定しておく必要があります。

「ファイル」→「アカウント情報」→「アカウントの追加」で設定します。

Outlookのライブラリの参照設定をONにする

VBAからOutlookを利用できるように、参照設定を追加する必要があります。

VisualBasic画面の上部メニューのツール → 参照設定 の順で選択します。

Microsft Outlook xx.x Object Library」 (xxはバージョン)にチェックを入れます。

VBA参照設定

実装方法

以下のプログラムを標準モジュールに追加します。

作成したフォームの「メール送信ボタン」のクリックイベントにて先のプロシージャを順番に起動するだけです。

メール送信

‘メールを送信する
Private Sub cmb送信_Click()

Call MailOpen
Call MailSend(Me.txt宛先, Me.txt件名, Me.txt本文) ’フォーム上の値を引数渡し

End Sub

今回はメールを送信するモジュールを標準モジュールに、呼び出し側は宛先・件名・本文を引数渡しする方法となっていますが、このあたりの作り方は臨機応変にお願いします。

CDOを使って送信する

CDOを使って送信するメリットとデメリット

CDOを使って送信するメリットは、ACCESS内で処理が完結する点です。他のソフトを使わないので利用しているメーラーに依存しません。

デメリットはプログラムが少々分かりづらい点と、送信履歴が残らない点です。

送信履歴については、CCやBCCで自身にもメールを送れば特に問題にはなりませんが・・・。

CDOとはMicrosoft Collaboration Data Objectsの略称で、Microsoftが提供するメッセージング アプリケーションやコラボレーション アプリケーションを構築するためのテクノロジーです。

準備

CDOのライブラリの参照設定をONにする

VBA参照設定

実装方法

以下のコードをメール送信フォームのモジュールに追加します。

※標準モジュールにする方がすっきりしますが、今回は簡易的に1つのフォームで完了するようにしています。

作成したフォームの「メール送信ボタン」のクリックイベントにて先のプロシージャを起動します。画面で指定された差出人・宛先・CC宛先・件名・本文を参照してメール送信されます。

ファイルを添付することも可能です。

その際は、以下の記述を追加します。

objCDO.AddAttachment 添付ファイル名

AddAttachmentはCDOオブジェクトのプロパティではなくファイルを添付するというメソッドですので、【=】で代入ではなく、AddAttachmentの引数渡し【スペース】である点に注意してください。

  • SMTPのポートやSSL認証などは利用されるメールサーバーに依存します。
  • 一部の宛先に文字化けが発生したためTextBodyPart.Charsetを設定しています。

こちらはメールを送信するモジュールをメール送信フォームに直接記述する方法をとっていますが、このあたりの作り方も臨機応変にお願いします。

宛先アドレス・差出人アドレスに表示名を設定するには?

上記のサンプルでobjCDO.To, objCDO.Fromへのアドレス代入の際、以下のように表示名を足した文字列を代入することで、表示名をコントロールすることが可能です。

objCDO.To = “表示名 <touseraddress@xxx.yy.zz>”

objCDO.From = ” 表示名 <username@xxx.yy.zz>”

具体的には、以下のように表示名の変数と宛先の変数、”<>”記号を&を使って結合しましょう!

objCDO.To = 表示名変数 & “<” & 宛先アドレス変数 & “>”

 

ABOUT ME
アズビーパートナーズ
アズビーパートナーズ
プログラマーと社内SEとしての経験を活かして、 情報システム部門のご相談を承ります。 得意な分野はAccessによる短納期開発、 BIツール(QlikSense/QlikView)の開発です。 現在はCMSを利用したホームページの作成にも力を入れています。