動作確認した時の画面を思い出しながら、読んでください。
(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 のようなメーラーでは、送信者として表示されます。
・メーラーの表示
もしメールを受信した人が、返信すると、abc@def.com 宛てに届きます。
また「Tab」で区切って、メール送信時のIDとパスワードを、変数で指定しています。
vbTab & id & ":" & pass
つまり変数 mailfrom には、プログラムで組み立てられると、最終的に以下のような文字列が代入されることになります。
mailfrom = "株式会社○○<abc@def.com> abc@def.com:12345"
(7)件名を指定している部分です。
subj = "送信テスト"
・メーラーの表示
(8)メールの本文を書いている部分です。
body = "おはようございます。" & vbCrLf & "今日は良い天気ですね。"
*本文の改行は vbCrLf で行なっています。
・メーラーの表示
(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, "完了"
①"送信に成功しました。"
②vbOKOnly
③vbInformation
④"完了"
*②と③は「+」演算子で結合して、一つの引数としている点に注意してください。
■エラー時
MsgBox "送信できませんでした。" & vbCrLf & msg, vbOKOnly + vbCritical, "エラー"
①"送信できませんでした。" & vbCrLf & msg
②vbOKOnly
③vbCritical
④"エラー"
エラー時のメッセージは、「vbCrLf」で改行して、2行で表示しています。また変数 msg で、エラーの原因を表示している点がポイントです。