小さい会社の1人SEの開発記というか奮戦記

  1. Access
  2. 1720 view

Basp21を使ってアクセスのマクロから電子メールを発信する【Access マクロ】

とりあえずプログラマとして一番なじみのある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するか、コメントアウトしておきます。

アラームリスト用にカスタマイズ

アラームリストに使うために以下のカスタマイズを追加します。

  1. エクスポートしたエクセルのファイルネームの後ろに _yyyymmdd の形式で日付を表した文字列を追加し、メールに添付する
  2. 件名の後ろに(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 マクロ】

Accessの最近記事

  1. Accessの数値型ではまる・・・。

  2. クエリで日付から曜日を算出する。【Access】

  3. クエリのLikeをバイナリーモードで処理したい【Access】

  4. アクセスのマクロ機能を初心者に解説【Access】

  5. NZ関数でNullを上手く使う【Access】

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


お薦め書籍

最近の記事

  1. Access

    Accessの数値型ではまる・・・。
  2. Excel

    日本語をエンコードする【Excel VBA】
  3. Access

    クエリで日付から曜日を算出する。【Access】
  4. PCパーツ

    ASUS AMD Ryzen 4000 シリーズ搭載小型ベア…
  5. Microsoft365

    コンデジをTeamsのWebカメラに使う
  6. SQL Server

    SQL文で今日から7日前までを指定する