Accessで自動メール送信:Outlook連携の実践
nanikatoaccess
なにか to Access
以下では、「Accessで自動メール送信時の注意点:大量送信や添付ファイル取り扱い」をテーマに、VBAやマクロを使ってOutlookなどを呼び出す際に気を付けたいポイントを整理します。特に大量送信(メルマガ風に数百~数千通を一括送るケースなど)や、レポート出力・ファイル添付を絡めたシナリオにフォーカスし、安全・確実にメールを送るためのヒントを紹介します。
Access×Outlook連携は非常に便利ですが、以下のような問題が起こり得ます。
Sleep
関数を使い、1~2秒程度のインターバルを挟む。On Error GoTo
構文でエラーを捕捉し、数秒待機後に再送を試す or 次のメールに進む判断をする。DoCmd.OutputTo acOutputReport, "レポート名", acFormatPDF, ファイルパス
.BodyFormat = 2 (olFormatHTML)
、.HTMLBody = "<html>..."
などを使用.Send
or .Display
)To
に全リストを入れてしまわないようVBAで .BCC = strAllAddresses
にすると安心送信ステータス
, 送信日時
, エラーメッセージ
などを格納Public Sub SendBulkReport()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim olApp As Object
Dim olMail As Object
' メール対象を抽出 (例: tbl_顧客にメールアドレス, 顧客ID など)
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT 顧客ID, メールアドレス, 顧客名 FROM tbl_顧客 WHERE IsNull(メールアドレス)=False", dbOpenForwardOnly)
Set olApp = CreateObject("Outlook.Application")
Do Until rs.EOF
Dim strAddr As String
strAddr = rs!メールアドレス
If strAddr <> "" Then
' 1) PDFレポート出力
Dim strFile As String
strFile = Environ("TEMP") & "\Report_" & rs!顧客ID & ".pdf"
DoCmd.OutputTo acOutputReport, "rpt顧客請求", acFormatPDF, strFile, False, , , acExportQualityPrint
' 2) メール作成
Set olMail = olApp.CreateItem(0) ' olMailItem
With olMail
.To = strAddr
.Subject = "ご請求書送付 (" & rs!顧客名 & " 様)"
.Body = rs!顧客名 & " 様" & vbCrLf & vbCrLf & _
"いつもお世話になっております。請求書をPDF添付にてお送りします。"
.Attachments.Add strFile
.Send
End With
' 3) 添付したPDFを削除(必要に応じて)
Kill strFile
' ログ記録 or Sleep(1000) などでインターバル可
End If
rs.MoveNext
Loop
MsgBox "メール送信が完了しました。", vbInformation
ExitProc:
If Not rs Is Nothing Then rs.Close
Set rs = Nothing
Set db = Nothing
Set olMail = Nothing
Set olApp = Nothing
End Sub
ポイント:
strFile
に出力.Attachments.Add strFile
で添付Kill strFile
でローカルファイルを削除(必要に応じて残す設計でもOK)Sleep
やDoEvents
で送信間隔を空ける、ログを残すなどを適宜追加Accessでのメール送信機能は、レポートやDB情報を踏まえたきめ細かい通知ができる点が大きな魅力。
しかし、大量送信やファイル添付を伴うと運用リスクやエラー時の対応が重要になります。
本記事を踏まえつつ、社内メールサーバーのポリシーやファイルサイズの制限なども確認し、安全かつ効率的なメール自動化を進めてみてください。
関連記事
これらのポイントを押さえれば、「Accessから一斉メール送信+PDF添付」といったシステムも安心して運用でき、定型連絡やレポート発送の手間が大幅に軽減されるでしょう。