Accessで自動メール送信時の注意点:大量送信や添付ファイル取り扱い
nanikatoaccess
なにか to Access
以下では、「Access×Gmail SMTP送信:Outlookが無くてもメール送信できる?」をテーマに、Microsoft Access のVBAからGmailのSMTPサーバーを直接呼び出してメールを送る方法を紹介します。OutlookをインストールしていないPCでも、Gmailアカウントの認証情報を使用して送信できるため、軽量・シンプルなメール送信シナリオで役立ちます。ぜひ参考にしてみてください。
GmailのSMTP(送信サーバ)の一般的な設定は以下の通りです:
smtp.gmail.com
注意:
VBA上でCDO (Collaboration Data Objects) を使い、GmailのSMTPへ直接接続するサンプルを示します。
Option Compare Database
Option Explicit
Public Sub SendMailViaGmailCDO()
Dim objMsg As Object
Dim strSMTP As String
Dim strUser As String
Dim strPass As String
' --- GmailのSMTP情報 ---
strSMTP = "smtp.gmail.com"
strUser = "あなたのメールアドレス@gmail.com"
strPass = "アプリパスワード" ' 2FAの場合はアプリパスワードを取得
' CDO.Message オブジェクト生成
Set objMsg = CreateObject("CDO.Message")
' コンフィグ設定
With objMsg.Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ' cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPass
' TLSを使う (ポート587)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
.Update
End With
' メール本体の設定
With objMsg
.From = strUser
.To = "送信先メールアドレス@example.com"
.Subject = "Access + Gmail SMTPテスト"
.TextBody = "CDO + Gmailでメール送信しています。" & vbCrLf & "Outlook不要!"
.Send
End With
MsgBox "メール送信完了しました。", vbInformation
Set objMsg = Nothing
End Sub
ポイント解説:
.Item(".../smtpusessl") = True
→ TLS暗号化を有効.From
, .To
, .Subject
, .TextBody
などでメール内容指定.Send
で実際に送信実行すると:
System.Net.Mail
(VB.NET)に近い実装は標準VBAにはなく、CDOが手軽な手段.With objMsg
...
.AddAttachment "C:\Temp\Document.pdf"
...
.Send
End With
objMsg.AddAttachment ファイルパス
で添付可能 (CDOバージョンによってはAddAttachmentがない場合があるため要注意)With objMsg
.HTMLBody = "<html><body><h1>こんにちは</h1><p>HTMLで送信!</p></body></html>"
.Fields("http://schemas.microsoft.com/cdo/configuration/sendformat") = 0 ' cdoSendEmailHTML
...
End With
.Fields(".../sendformat") = 0
(HTML).TextBody
ではなく .HTMLBody
を設定項目 | Gmail SMTP (CDOなど) | Outlookライブラリ |
---|---|---|
必要ソフト | Outlook不要。Access単体 & ネット接続があれば可 | OutlookをPCにインストール必須 |
セキュリティ関連 | Googleアカウントで2FAやアプリパス等が必要 | 組織のExchange環境やOutlookのセキュリティが関与 |
操作性 | 直接コードでSMTP設定。エラーはSMTPレベルで返る | VBAでOutlookオブジェクトを生成し操作。Office連携しやすい |
UI操作 (Draft表示等) | なし。すぐに送信 | .Display で編集画面表示し、手動送信できる |
大量送信/一括送信 | メールサーバーのレート制限に注意 (Gmailは1日上限など) | Exchange側でもスパム判定があるが、企業内なら調整可 |
依存関係 | CDOライブラリ(Windows標準) + Gmailアカウント | Outlookのバージョンやライセンスに依存 |
結論:
smtp.gmail.com
へポート587(または465)で接続.From
, .To
, .Subject
, .TextBody
を指定して .Send
「Access + Gmail SMTP」は、シンプルかつローカル環境にも依存しない送信手段として非常に便利です。Outlookが不要だったり、サーバー上で自動送信したい場合などは、ぜひCDO + Gmailの仕組みを試してみてください。
関連記事
Gmail SMTPを上手に活用すれば、外部連携が必要なAccessアプリでも安価にメール通知を構築できます。アプリパスワードやセキュリティ設定を正しく行い、安全・スムーズな運用を目指しましょう。