Microsoft Access Club >初心者講座 >Mail管理ソフト >このページ >次頁 - 前項


メール複数同時配信フォームの作成 - 2:Mail管理ソフト17



このソフトの中核をなすメール送信フォームを作成していきます。メール送信は、メールアドレス1つに送信する「単独送信」と複数のメールに送信する「複数同時送信」があります。今回は、メール送信ソフトの醍醐味である「複数同時配信フォーム」の解説を行います。

送信データを印刷する

メール送信内容を印刷する、しないを選択できるようにチェックボックスを新規作成します。

印刷を有効にした場合

以下のA4版のレポートを印刷します。

メール送信を行う

メール送信は以下の手順で行います。

  1. リストボックスで選択された氏名、メールアドレスを変数に格納します。
  2. SendObject メソッドを用いて、tbl_comentテーブルの該当レコードをメール内容として、変数に格納されたメールアドレス宛に、BCCで同時送信を行います。
  3. 送信履歴をtbl_rirekiテーブルに順次格納します。
  4. 送信履歴の印刷が有効になっている場合は、直ちに印刷が行われます。

コマンドボタンのクリック時イベントプロシージャの作成

メール送信は、フォーム上のコマンドボタンをクリックすることで行われます。以下のプロシージャをコマンドボタンのクリック時イベントに記述します。

Private Sub cmd_実行_Click()

    On Error GoTo エラー

    Dim 行 As Variant
    Dim varmail As Variant '送信先のmailアドレスです。
    Dim var件名 As Variant
    Dim var書込み条件 As Variant '履歴に書き込む変数です。
    Dim var送信内容 As Variant
    Dim var宛名 As Variant
    Dim bln署名 As Boolean
    Dim var署名 As Variant
    Dim strmsg As String
    
    bln署名 = DLookup("CK2", "tbl_kankyo", "ID=1")
    var件名 = Me.txt_件名
    var送信内容 = Me.txt_送信内容
    
    strmsg = "実行する場合は「OKをクリックして下さい。" & Chr(13) _
            & "※" & IIf(Me.ck_署名, "「署名」は添付する設定になっています。", _
            "「署名」は添付しない設定になっています。") & Chr(13) _
            & "※" & IIf(Me.ck_印刷, "「印刷」は行う設定になっています。", _
            "「印刷」は行わない設定になっています。")

    If IsNull(Me.list_対象Email.Column(1)) Then
        MsgBox "メールアドレスを選択して下さい。", vbCritical, MyTitle
        Exit Sub
    End If
        
    If IsNull(Me.ID) Then
        MsgBox "送信内容が登録されていません。", vbCritical, MyTitle
        Exit Sub
    End If
    
    If MsgBox(strmsg, vbCritical + vbOKCancel, MyTitle) = vbCancel Then
        Exit Sub
    End If
解説

IF構文を用いて以下の事前チェックを行っています。

  1. メールアドレス(氏名)を選択せずにコマンドを実行していないか。
  2. 送信内容が空欄になっていないか。
  3. 送信実行の確認メッセージでキャンセルボタンをクリックしているか。
独自署名の選択の有無
    '独自署名選択の有無
    If bln署名 = True Then
        var署名 = Dokujishomei
    Else
        var署名 = Shomei
    End If
解説
  1. 変数bln署名は、環境設定テーブル(tbl_kankyo)の署名フィールドの値が代入されています。
  2. 独自署名が有効(bln署名=True)であれば、標準プロシージャDokujishomeiを変数var署名に代入します。
  3. 逆に、無効であれば標準プロシージャShomeiを変数var署名に代入します。
メールアドレスの送信
    varmail = Null    '変数varmailにNullを代入します。
    For Each 行 In Me.list_対象Email.ItemsSelected
        varmail = varmail & IIf(Not IsNull(varmail), ";", "") & _
                                Me.list_対象Email.Column(1, 行)
    Next
                
    If Me.ck_署名 = True Then
        DoCmd.SendObject acSendNoObject, , , , , varmail, _
                            var件名, var送信内容 & var署名, True
    Else
        DoCmd.SendObject acSendNoObject, , , , , varmail, _
                                        var件名, var送信内容, True
    End If
解説
  1. 変数varmailを初期化します。
  2. For Each 〜 Nextの繰り返し制御を用いて、マウスで選択したメールアドレス(名前)を全て変数varmailに代入します。
  3. SendObjectメソッドを用いてメールを送信します。送信方法は、OutlookまたはOutLookExpressにキューが保存されるのでこれらメーラーからメール送信を行います。
メール送信履歴の保存
    var書込み条件 = ""
    For Each 行 In Me.list_対象Email.ItemsSelected
        var書込み条件 = var書込み条件 & _
                        IIf(Not IsNull(var書込み条件), ",", "") & _
                        "'" & Me.list_対象Email.Column(1, 行) & "'"
    Next
    '一時登録されていたメールアドレスを全て消去します。
    varmail = Null
     
    If MsgBox("今回の送信者履歴をテーブルに保存しますか?" & Chr(13) & _
                "印刷を行う場合は、「保存」を行って下さい。" _
                , vbCritical + vbOKCancel, MyTitle) = vbOK Then
                                
        DoCmd.SetWarnings False '警告メッセージをオフにします。
                
        DoCmd.RunSQL "INSERT INTO tbl_soushin ( 送信日, 件名, 送信事項) " _
            & "SELECT #" & Now() & "# As 送信 , 件名, コメント内容 " _
            & "FROM tbl_coment " _
            & "WHERE tbl_coment.ID = " & Me.txt_ID & ";"
            
        'In演算子を用いて抽出する。
        DoCmd.RunSQL "INSERT INTO tbl_rireki " _
            & "( 送信日, 名前, 生年月日, 性別, メールアドレス ) " _
            & "SELECT #" & Now() _
            & "# As 送信, 名前, 生年月日, 性別, メールアドレス " _
            & "FROM tbl_kihon " & "WHERE tbl_kihon.メールアドレス" _
            & "In(" & var書込み条件 & ");"
解説
  1. メール送信履歴を専用テーブルに書き込んでいきます。
  2. For Each 〜を用いて、変数var書込み条件にメールアドレスを代入します。
  3. テーブルへのデータ書き込みは、追加クエリ(SQL)を用いて行います。
メール送信履歴の印刷とエラー処理
	'警告メッセージをオンに戻します。
        'この段階でオンに戻さないと、今後警告メッセージが表示されません。
        DoCmd.SetWarnings True
    
        If Me.ck_印刷 = True Then
            DoCmd.OpenReport "rpt_print_2", acViewPreview
            MsgBox "データ保存及び印刷が終了しました。", , MyTitle
        Else
            MsgBox "データ保存が終了しました。", , MyTitle
        End If

    End If
    
Exit Sub

エラー:

    If Err.Number = 2501 Then
        Resume
    Else
        MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _
                "エラー番号: " & Err.Number & Chr(13) & _
                "エラー内容: " & Err.Description, vbCritical, MyTitle
        Exit Sub
    End If

End Sub
解説
  1. レポート名rpt_print_2を印刷します。
  2. エラーコード2501は、印刷を中止した際に発生しますが、Resumeステートメントを用いてエラーが発生した次の行から開始します。

 

ページの先頭へ 前ページへ戻る

 


メール複数同時配信フォームの作成 - 2:Mail管理ソフト17


-Microsoft Access Club-

cPanel と PLESKをインストールした専用・共有レンタルサーバーを銀行振込でご提供中。契約書は一切不要です。
cPanel や PLESKをインストールした専用・共有レンタルサーバー
まずは1ヶ月から...。
日本国内の銀行振込がOK、契約書は不要です。