下記G Suite アップデート ブログにある通り、今年の6月には“安全性の低いアプリ”によるGmailやカレンダーといったGoogleのサービスに新規接続ができなくなり、2021年2月には、安全性の低いアプリへの接続はすべて無効になります。
当ブログで以前書いた下記記事、「CDOを使ってGmail送信するVBAマクロ」も使えなくなるわけですね。
今回はCDOの代わりにOutlookを使ってGmail送信を行うVBAマクロをご紹介します。
Option Explicit
Public Sub Sample()
Dim olApp As Object
Dim v As Variant
Const olFormatPlain = 1 'Outlook.OlBodyFormat
'Outlookが起動していないと送信できない場合があるので事前に起動
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If olApp Is Nothing Then
Shell "OUTLOOK.EXE", vbNormalFocus
Do
Set olApp = GetObject(, "Outlook.Application")
DoEvents
Loop While olApp Is Nothing
End If
On Error GoTo 0
'添付ファイル
v = Array("C:\temp\job_barista_man.png", _
"C:\temp\job_barista_woman.png", _
"C:\temp\job_cafe_tenin_woman.png")
SendGmailUsingOutlook _
MailApp:=olApp, _
AccountAddress:="*****@gmail.com", _
MailTo:="*****@hogehoge.org", _
MailCc:="", _
MailBcc:="", _
MailSubject:="【テストメール】", _
MailBody:=ChrW(&H4E3A) & ChrW(&H4E86) & ChrW(&H68C0) & ChrW(&H67E5) & ChrW(&H6D4B) & _
ChrW(&H8BD5) & ChrW(&H73AF) & ChrW(&H5883) & vbNewLine & ChrW(&H8BF7) & ChrW(&H628A) & _
ChrW(&H6570) & ChrW(&H636E) & ChrW(&H53D1) & ChrW(&H7ED9) & ChrW(&H6211), _
MailBodyFormat:=olFormatPlain, _
AttachmentFilePath:=v, _
FlgSend:=True
End Sub
Private Sub SendGmailUsingOutlook( _
ByVal MailApp As Object, _
ByVal AccountAddress As String, _
ByVal MailTo As String, _
ByVal MailCc As String, _
ByVal MailBcc As String, _
ByVal MailSubject As String, _
ByVal MailBody As String, _
Optional ByVal MailBodyFormat As Long = 1, _
Optional ByVal AttachmentFilePath As Variant = Empty, _
Optional ByVal FlgSend As Boolean = True)
'Outlookを使ってGmail送信を行うVBAマクロ
'※要Gmailアカウントの追加
'https://support.office.com/ja-jp/article/70191667-9c52-4581-990e-e30318c2c081 参照
Dim accGmail As Object 'Outlook.Account
Dim i As Long
Const olMailItem = 0
Set accGmail = MailApp.Session.Accounts.Item(AccountAddress)
If accGmail Is Nothing Then Exit Sub
With MailApp.CreateItem(olMailItem)
.To = MailTo
If Len(Trim(MailCc)) > 0 Then .CC = MailCc
If Len(Trim(MailBcc)) > 0 Then .BCC = MailBcc
.Subject = MailSubject
.BodyFormat = MailBodyFormat
If Not IsEmpty(AttachmentFilePath) Then
For i = LBound(AttachmentFilePath) To UBound(AttachmentFilePath)
.Attachments.Add AttachmentFilePath(i)
Next
End If
.Body = MailBody
Set .SendUsingAccount = accGmail
If FlgSend Then
.Send
Else
.Display
End If
End With
End Sub
MailItemオブジェクトを作って送るだけの、何のひねりも無いコードです。
ただ、テスト環境では、添付ファイルを指定した際にOutlookが起動していない状態だと上手く送信できなかったため、事前にOutlookを起動するようにしています。
仕様上、上記コードを実行する前に、OutlookにGmailアカウントを設定しておく必要があります。
設定方法は下記サイトで詳しく説明されているので、こちらをご参照ください。
CDOが使えなくなる以上、Outlookを使うのが簡単だと思うのですが、想像以上に送信に時間が掛かりました。
下記記事のように、直接APIを叩いた方が使い勝手が良いかもしれません。
(VBAで実装するのは面倒ですが・・・)






















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