とりあえずプログラマとして一番なじみのあるBasp21を使ってサンプルプログラムを作ってみました。昔使っていたものを今風にリアレンジしたもので紹介します。Basp21のインストールについては割愛しますので、ホームページ参照願います。
コンテンツ
条件整理
最低限の機能説明のため社内イントラネット内にある自由に使えるSMTPサービス(メールサーバー)がある前提で説明します。
SMTPサービス | 192.168.0.250 |
---|---|
宛先 | atesaki@hogehoge.com |
差出人 | sashidasinin@hogehoge.com |
動作確認用サンプルプログラム
※動作確認はエクセルを使ってボタンにマクロの登録を行った方が簡単かもしれません。
条件整理で書いた部分は「定数宣言」で先頭に置いておきましたのでご自身の環境に合わせて修正し後はコピペで動作テストしてみて下さい。
Sub メール発信_basp21() ' 定数宣言 Const MAIL_SV As String = "192.168.0.250" ' SMTPサービス Const MAIL_TO As String = "atesaki@hogehoge.com" ' 宛先 Const MAIL_FM As String = "sashidasinin@hogehoge.com" ' 差出し人 ' 変数宣言 Dim OBJ_BASP21, MSG, TXT_SUBJ As String, TXT_BODY As String TXT_SUBJ = "テストメール" ' 件名 TXT_BODY = "これはテストメールです" ' 本文 ' メール送信処理 Set OBJ_BASP21 = CreateObject("basp21") 'BASP21オブジェクト MSG = OBJ_BASP21.SendMail(MAIL_SV, MAIL_TO, MAIL_FM, TXT_SUBJ, TXT_BODY, "") Set OBJ_BASP21 = Nothing ' 送信完了確認 If MSG <> "" Then MsgBox MSG Else MsgBox "メール送信完了しました。" End If End Sub
以下サンプルプログラムの解説です。
定数宣言部分
Const MAIL_SV As String = “192.168.0.250” ‘ SMTPサービス
Const MAIL_TO As String = “atesaki@hogehoge.com” ‘ 宛先
Const MAIL_FM As String = “sashidasinin@hogehoge.com” ‘ 差出し人
1行目にSMTPサービスが動いているサーバーのIPアドレスかサーバー名称を設定します。
2行目3行目は動作確認であればご自身のメールアドレスを設定するのが良いでしょう。
変数宣言部分
Dim OBJ_BASP21, MSG, TXT_SUBJ As String, TXT_BODY As String
TXT_SUBJ = “テストメール” ‘ タイトル
TXT_BODY = “これはテストメールです” ‘ 本文
1行目で必要な変数を宣言しています。件名と本文は必要であれば修正して下さい。
メール送信処理
Set OBJ_BASP21 = CreateObject(“basp21”) ‘BASP21オブジェクト
MSG = OBJ_BASP21.SendMail(MAIL_SV, MAIL_TO, MAIL_FM, TXT_SUBJ, TXT_BODY, “”)
Set OBJ_BASP21 = Nothing
この3行が実際にメールを送信するプログラムです。
1行目でbasp21のオブジェクトを作成
2行目のオブジェクト.SendMailでメールを送信
3行目でオブジェクトを破棄します。
送信完了確認
If MSG <> “” Then
MsgBox MSG
Else
MsgBox “メール送信完了しました。”
End If
MSG = OBJ_BASP21.SendMail()でMSGにエラーメッセージが代入されるので、MSG<>””であればそのエラーメッセージを表示し、そうでなければ「メール送信完了しました」とメッセージボックスを表示します。実運用では、ログテーブルにInsertするか、コメントアウトしておきます。
アラームリスト用にカスタマイズ
アラームリストに使うために以下のカスタマイズを追加します。
- エクスポートしたエクセルのファイルネームの後ろに _yyyymmdd の形式で日付を表した文字列を追加し、メールに添付する
- 件名の後ろに(mm/dd)の形式で日付を表した文字列を追加する
エクセルファイル名の変更と添付機能の実装
Basp21にファイルを添付する場合は「添付ファイルのフルパス|表示名称|Content-type」の文字列ををSendMailに渡します。
拡張子 .xlsx のContent-typeは「application/vnd.openxmlformats-officedocument.spreadsheetml.sheet」詳しくは「Description of the default settings for the MimeMap property and for the ScriptMaps property in IIS」を参照願います(翻訳しないで英文のままの方が分かり易いです)。
例として C:\work\test.xlsx をカスタマイズ例に沿って添付する文字列を紹介します。
Dim TXT_FILE As String TXT_FILE = "C:\work\test.xlsx" ' 添付ファイルフルパス TXT_FILE = TXT_FILE & "|test_" & Format(Now(), "yyyymmdd") & ".xlsx" ' メールソフト表示名称 TXT_FILE = TXT_FILE & "|application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 'エクセル xlsx mime-type
これをSendMailの最後の引数として引き渡せばOKです。
件名の後ろに(mm/dd)の形式で日付を表した文字列を追加
これはVBAが分かっていれば至極簡単です。
TXT_SUBJ = "テストメール(" & Format(Now(), "mm/dd") & ")"
実際にカスタマイズしたプログラムソース
Function メール発信_basp21() ' 定数宣言 Const MAIL_SV As String = "192.168.0.250" ' SMTPサービス Const MAIL_TO As String = "atesaki@hogehoge.com" ' 宛先 Const MAIL_FM As String = "sashidasinin@hogehoge.com" ' 差出し人 ' 変数宣言 Dim OBJ_BASP21, MSG, TXT_SUBJ As String, TXT_BODY As String, TXT_FILE As String TXT_SUBJ = "テストメール(" & Format(Now(), "mm/dd") & ")" ' 件名 TXT_BODY = "これはテストメールです" ' 本文 TXT_FILE = "" ' 添付ファイルが無ければ以下3行はコメントアウト TXT_FILE = TXT_FILE & "C:\Tools\mail\テスト.xlsx" ' 添付ファイルフルパス TXT_FILE = TXT_FILE & "|テスト_" & Format(Now(), "yyyymmdd") & ".xlsx" ' メールソフト表示名称 TXT_FILE = TXT_FILE & "|application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 'エクセル xlsx mime-type ' メール送信処理 Set OBJ_BASP21 = CreateObject("basp21") 'BASP21オブジェクト MSG = OBJ_BASP21.SendMail(MAIL_SV, MAIL_TO, MAIL_FM, TXT_SUBJ, TXT_BODY, TXT_FILE) Set OBJ_BASP21 = Nothing ' 処理完了メッセージ メール発信_basp21 = MSG End Function
まとめ
専用のコンポーネンツを使うと簡単にカスタマイズができます。定型メールなら十分な事ができると思っています。事前に件数を計算して件名に入れると親切なのかもしれませんね。
本文を追加する場合は TXT_BODY に文を追加頂き、vbCrLf で改行しながら文章を追加していきます。
関連記事:「アクセスのマクロからアラームメールを発信する【Access マクロ】」
関連記事:「CDO.Messageを使ってアクセスのマクロから電子メールを発信する【Access マクロ】」
この記事へのコメントはありません。