Access×Gmail SMTP送信:Outlookが無くてもメール送信できる?
nanikatoaccess
なにか to Access
以下では、「Accessで自動メール送信:Outlook連携の実践」をテーマに、Microsoft AccessからMicrosoft Outlookを制御してメールを送信する方法を解説します。多くのビジネス環境ではOutlookでのメール送受信が標準となっており、AccessのVBAでOutlookを操作すれば一斉メール送信やリマインドメールの自動化など、日々の業務効率化につながります。
Access(VBA)からOutlookを制御する場合、大きく分けて2通りのやり方があります。
Dim olApp As Object: Set olApp = CreateObject("Outlook.Application")
初心者にはEarly Bindingがおすすめですが、配布先の環境差を考えるならLate Bindingを使うことも多いです。
Public Sub SendMail_Simple_EarlyBinding()
' Outlook参照設定必須 (Microsoft Outlook XX.X Object Library)
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = "example@domain.com" ' 宛先
.CC = "cc@domain.com" ' CC
.Subject = "テストメール送信"
.Body = "これはテストメールです。Accessより自動送信しています。"
.Send ' 送信 (または .Display で画面表示させた後に手動送信)
End With
Set olMail = Nothing
Set olApp = Nothing
MsgBox "メールを送信しました。", vbInformation
End Sub
Public Sub SendMail_Simple_LateBinding()
Dim olApp As Object
Dim olMail As Object
' Outlookアプリケーションを取得
Set olApp = CreateObject("Outlook.Application")
' メールアイテムを作成
Set olMail = olApp.CreateItem(0) ' 0 = olMailItem
With olMail
.To = "example@domain.com"
.Subject = "テストメール送信"
.Body = "これはテストメールです。Late Bindingで送信中。"
.Send
End With
Set olMail = Nothing
Set olApp = Nothing
MsgBox "メールを送信しました。", vbInformation
End Sub
ポイント:
.Send
ですぐ送信、.Display
なら編集画面を開きつつ自動生成した内容をユーザーが確認して送信できる.Attachments.Add "ファイルパス"
で添付ファイルを追加想定シナリオ: tbl_顧客
にメールアドレスが登録されていて、指定条件のレコードにメールを一斉送付する例。
Public Sub SendBulkMail()
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim olApp As Object
Dim olMail As Object
Dim strSQL As String
Dim strAddr As String
Set db = CurrentDb
' 例:登録日が直近の顧客を抽出
strSQL = "SELECT 顧客名, メールアドレス FROM tbl_顧客 WHERE 登録日 >= DateAdd('m', -1, Date())"
Set rs = db.OpenRecordset(strSQL, dbOpenForwardOnly)
If rs.EOF Then
MsgBox "メール送信対象のデータがありません。", vbInformation
GoTo ExitProc
End If
' Outlook起動 (Late Binding)
Set olApp = CreateObject("Outlook.Application")
' レコードセットを巡回
Do Until rs.EOF
strAddr = Nz(rs!メールアドレス, "")
If strAddr <> "" Then
' メール作成
Set olMail = olApp.CreateItem(0) ' olMailItem
With olMail
.To = strAddr
.Subject = rs!顧客名 & " 様向けのお知らせ"
.Body = rs!顧客名 & " 様、こんにちは。" & vbCrLf & _
"Accessからの自動送信メールです。"
.Send
End With
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
ポイント:
Do Until rs.EOF
でDAOレコードセットを巡回し、メールアドレスを取得.Attachments.Add "C:\Path\Doc.pdf"
で添付を追加Set olApp = CreateObject("Outlook.Application")
で自動起動するが、Outlookがインストールされていない環境ではエラーOn Error Resume Next
等でエラー処理し、メッセージを出すようにする.Display
を使い、ユーザーが内容を確認→自分で送信ボタン押す流れにするDoCmd.OutputTo acOutputReport, ...
) → そのファイルを添付「Accessのデータを活かしつつ、Outlookでメール送信」という組み合わせは多くの現場で有効です。日次レポートや請求書、在庫アラートなどを自動送信すれば、手作業によるミスや手間を削減できるでしょう。ぜひ本記事を参考に自分の業務に合わせた連携を試してみてください。
関連記事
Access×Outlook連携は“Office同士”の親和性が高く、とても強力です。これをマスターすれば、社内外への通知・連絡業務が画期的に楽になります。ぜひ挑戦してみましょう。