2014年2月15日土曜日

Ariawaseライブラリ集で学ぶVBA(2) CdoMail

【まえがき】

VBAソースコード管理支援ツール vbac を作成されている いげ太さん作のAriawase VBAライブラリ集 (Ver. 0.6.0 β)について、何回かに分けて勉強しつつ解説してみたいと思います。

※ 前回は Ver. 0.5.0のものを取り上げたのですが、いげ太さんから次期バージョンは、現在公開中のVer. 0.6.0 βでほぼほぼfixとのコメントを頂いたので、今回から Ver. 0.6.0 βを取り上げたいと思います。

第2回目となる今回は、CdoMail.clsについてです。

 【CdoMail.clsについて】

VBAでメールを送信したい場合(例えば、定期的に何らかの通知を行いたい場合)に便利に使えるクラスです。

Windows2000以降のWindowsで用意されているCDO(Collaboration Data Objects)というコンポーネントを利用して、メールを送信するように実装されています。
クラスの内部設計は、CDOの利用に際して必要となる定数をうまく内部に遮蔽した上で、CDOに用意されているAPIを薄くラップするような作りになっています。変な癖もないので、扱いやすいクラスだと思います。

CDOについて詳しく知りたい方は適当に検索してください。(と言っても、ざっと調べた限り、今回紹介する内容以上のものはなさそうですが…)

 【CdoMail.clsの使い方】

利用にあたって必要な構成

Ariawaseライブラリ内の Resource.bas が必須です。

メンバの概略

  • Configure
    • メール送信に関する設定を行うメソッド
  • NewMail
    • メールの作成を開始するためのメソッド
  • SetAddress, SetMessage, AddAttachments
    • 送信するメール本体の設定を行うメソッド
  • SendMail
    • 実際に送信するためのメソッド
  • QuickSendMail
    • メール本体の設定から実際の送信まで、一続きに行うための便利メソッド

サンプルコード

SendMailメソッドを用いる場合と、QuickSendMailを用いる場合の2パターンを下記に示しています。メール送信までの流れは、おおざっぱには以下のようになります。
  • メールサーバ設定 -> メール本文作成 -> 送信 の順にAPIを呼び出します。
    • 具体的には、以下の通りです。
      Configure -> NewMail -> SetAddress, SetMessage, AddAttachments -> SendMail
    • もしくは、QuickSendMailを用いる場合は以下の通りです。
      Configure -> QuickSendMail

CdoMailTestが、SendMailメソッドを用いる場合、
CdoMailTestQuickは、QuickSendMailを用いる場合です。

 【各メンバについての解説】

Configure

  • CdoMailを使うにあたり、最初に呼ぶ必要あり。送信に用いるサーバの各種設定を行う。
  • 第1引数: 自分のメールアドレス(送信元)
  • 第2引数(省略可): SMTPサーバのアドレス
    • SMTPサーバを省略した場合、第3引数以後の設定はないもととして扱われる
    • SMTPサーバの指定書式は「サーバアドレス:ポート番号」
      • 「:ポート番号」を省略した場合は、ポート25に設定
  • 第3引数(省略可能): 認証方法
    • cdoAnonymous (匿名認証), cdoBasic (Basic認証), cdoNTLM (NTLM認証)のいずれかを指定
    • デフォルトは、cdoAnonymous
  • 第4引数(省略可): ユーザ名
  • 第5引数(省略可): パスワード
  • 第6引数(省略可): SSLの使用の有無

NewMail

  • Configureメソッドで指定した設定で、メール送信の準備を行う。
    • メール本文作成の前に、呼び出す必要あり
    • 内部ではCDO.Messageを初期化し、Configureで作った設定を適用しています。
  • 引数なし

SetAddress

  • メールの宛先を設定します。
  • 第1引数: To
  • 第2引数(省略可): CC
  • 第3引数(省略可): BCC
    • いずれもArray(配列)を使って複数のアドレスを指定可能

SetMessage

  • メール本文に関する設定を行います。
  • 第1引数: メールのタイトル
  • 第2引数: メール本文
  • 第3引数(省略可): 文字エンコーディング
    • cdo7bit, cdo8bit, cdoISO_2022_JP, cdoShift_JIS, cdoEUC_JP, cdoUTF_8 のいずれかを指定
    • デフォルトは、cdoISO_2022_JP
  • 第4引数(省略可): ファイルエンコーディング
    • cdoBase64, cdoQuotedPrintable(QP encoding) のいずれかを指定
    • デフォルトは、cdoBase64

AddAttachments

  • 添付ファイルをセットします。
  • 引数: 添付するファイルのパス
    • Array(配列)を使って複数のパスを指定可能

MakeSend

  • 実際にメールを送信します。
  • 引数なし

QuickSendMail

  • 指定した引数の内容でメールを送信します。
  • 第1引数: To
    • Array(配列)を使って複数のアドレスを指定可能
  • 第2引数: メールのタイトル
  • 第3引数: メールの本文

【WinInet.basのソースコードから学ぶVBA】

定数の値には、別の定数の値を指定できる。

単一もしくは複数の変数を引数にとれるメソッドの作成

Arrayかどうかを判定する関数(下記例では、IsArray)を別途用意しておけば、引数に単一の変数もしくは、Arrayでパックした複数の変数のどちらでも渡せるようにできる。(この場合、引数の型はVariant。)

【どうでもいい感想】

  • アプリ側からアラートを飛ばすような用途にちょうど合うんじゃないかなぁと。。
  • メールを受信したいなど、複雑な処理をしたい場合は、BASP21を使うのが良さそうですね。