Excelでメール送信するプログラムの解説。

今回は、Excelを使ってメール送信するVBAプログラムについて、詳細に解説します。

動作確認した時の画面を思い出しながら、読んでください。

(1)イベントプロシージャについて
メールを送信するプログラムは、フォーム上に配置したコマンドボタンをクリックした時に実行されます。

このように、何かイベント(出来事)が起こった時に、システムが自動的に呼び出して実行するプロシージャを、イベントプロシージャと言います。

ExcelのVBEで、フォームを作成した時に、コマンドボタンのオブジェクト名に「cmd送信」という名前を付けましたよね。

したがって、クリック時のプログラムは、以下の範囲に書くことになります。


Private Sub cmd送信_Click()
  省略
End Sub


VBAプログラミングでは、このようなプロシージャが、プログラムを実行する最小単位になります。


(2)変数を宣言している部分です。
Dim bobj As Object
Dim svname As String
Dim id As String
Dim pass As String
Dim msg As Variant '送信チェック用

プログラムの中で使う変数を、あらかじめ宣言しています。変数とは、値を入れておく箱のようなものだと、イメージしてください。

また変数のデータ型にも注目してください。

・BASP21用の変数 bobj は、Object(オブジェクト)型です。

・変数 msg は、メールの送信が成功したかどうか、確認するためのものです。

どんな値が返ってきても受け取れるように、Variant型にしていますが、String型でも大丈夫です。

・その他の変数は、String(文字列)型です。


(3)変数に値を代入している部分です。
メールを送信するために必要な情報を、変数に代入しています。

'SMTPサーバ名:ポート番号:タイムアウト秒
svname = "ここにSMTPサーバ名:587:60"

'ログインID
id = "ここにログインID"

'パスワード
pass = "ここにパスワード"

*あなたの環境に合わせて値を設定します。
*ポート番号は、SMTPサーバによって、「25」か「587」を指定します。
*タイムアウト秒は、「60」や「120」というように指定できます。


(4)BASP21のオブジェクトを作成している部分です。
Set bobj = CreateObject("basp21")

オブジェクトを参照するためには、「Set」を使います。

これでBASP21に用意されている様々なメソッド(命令)が、変数 bobj を通じて使えるようになりました。

ただし、BASP21をインストールしていることが前提です。


(5)宛先(送信先)のメールアドレスを指定している部分です。
mailto = "ここに宛先メルアド"

プログラムのテスト中は、あなたが普段使っているメールアドレスにしたほうが便利です。


(6)送信者を指定している部分です。
mailfrom = "株式会社○○<" & id & ">" & vbTab & id & ":" & pass

変数 id には、メールアドレスが入っているので、以下のようになります。
株式会社○○<abc@def.com>

これが Outlook Express のようなメーラーでは、送信者として表示されます。

・メーラーの表示
mail-76.gif

もしメールを受信した人が、返信すると、abc@def.com 宛てに届きます。

また「Tab」で区切って、メール送信時のIDとパスワードを、変数で指定しています。
vbTab & id & ":" & pass

つまり変数 mailfrom には、プログラムで組み立てられると、最終的に以下のような文字列が代入されることになります。

mailfrom = "株式会社○○<abc@def.com>  abc@def.com:12345"


(7)件名を指定している部分です。
subj = "送信テスト"

・メーラーの表示
mail-77.gif


(8)メールの本文を書いている部分です。
body = "おはようございます。" & vbCrLf & "今日は良い天気ですね。"

*本文の改行は vbCrLf で行なっています。

・メーラーの表示
mail-78.gif


(9)実際にメールを送信しているのは、この1行です。
msg = bobj.SendMail(svname, mailto, mailfrom, subj, body, "")

上記までに変数に値を代入しておいたので、実際に送信するコードは、シンプルに書くことができました。

「SendMail」は、BASP21が用意しているメソッド(命令)です。

このメソッドは、メールを送信し、成功した場合は "" を返します。逆に失敗した場合は、エラーメッセージを返します。

それを変数 msg で受け取っています。

また、SendMailの最後に指定している引数 "" は、添付ファイルを指定する所ですが、今回は使わないので、空の文字列を指定しています。

メソッドの使い方や、指定する引数、オプションについては、BASP21 のWebサイトで詳しく説明されています。

BASP21には、メールを一括送信するメソッドもあるので、興味のある方は調べてみてください。


(10)メールの送信が成功したかどうか、チェックしている部分です。

If msg <> "" Then
  MsgBox "送信できませんでした。" & vbCrLf & msg, vbOKOnly + vbCritical, "エラー"
Else
  MsgBox "送信に成功しました。", vbOKOnly + vbInformation, "完了"
End If

変数 msg の値が "" 以外の場合は、メールの送信が失敗しています。

そのため、「エラー」のメッセージボックスを表示して、エラー原因がわかるようにしています。エラーの種類によって文字が変わります。

もし変数 msg の値が "" なら、メールの送信は成功しています。「送信に成功しました。」というメッセージボックスを表示して完了です。


【補足】
MsgBox(メッセージボックス)と引数の関係を、以下にまとめておくので、参考にしてください。

■送信成功
MsgBox "送信に成功しました。", vbOKOnly + vbInformation, "完了"

mail-75.gif

①"送信に成功しました。"
②vbOKOnly
③vbInformation
④"完了"

*②と③は「+」演算子で結合して、一つの引数としている点に注意してください。


■エラー時
MsgBox "送信できませんでした。" & vbCrLf & msg, vbOKOnly + vbCritical, "エラー"

mail-74.gif

①"送信できませんでした。" & vbCrLf & msg
②vbOKOnly
③vbCritical
④"エラー"

エラー時のメッセージは、「vbCrLf」で改行して、2行で表示しています。また変数 msg で、エラーの原因を表示している点がポイントです。

スポンサードリンク

スポンサードリンク






メール送信・受信プログラミング初心者入門 TOPへ