ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBAでメールを送信する・受信メールを取得する(OutLook使用)

※参照設定せずに遅延バインディングする場合のコードはこのページの一番下にあります。
■下準備:参照設定をしておく
f:id:ray88:20200906103953p:plain
■新規メールを作成して送信
・下書きフォルダに保存する場合
MailItem.Display → MailItem.Save
・直接送信する場合
MailItem.Display → MailItem.Send

Option Explicit

 Sub CreateNewMail()
 '-----------------------------------
 '新規メールを作成して送信する
 '-----------------------------------
   Dim olApp As Outlook.Application
   Dim MailItem As Outlook.MailItem
   
   'Outlookを起動する
   Set olApp = New Outlook.Application
   
   'メールを作成する
   Set MailItem = olApp.CreateItem(olMailItem)
   With MailItem
    '送信先TOを指定する
    .Recipients.Add("Yamada@gmai.com").Type = 1
    '送信先CCを指定する
    .Recipients.Add("Suzuki@gmai.com").Type = 2
    .Subject = "ご報告"
    '本文を指定する
    .Body = "山田様" & vbCrLf _
        & "お世話になっております。" & "先日のご報告を" _
        & "させていただきます"""
        '添付ファイルを指定する
        .Attachments.Add ThisWorkbook.Path & "\Sample.xlsx"
        .Send
        'テスト用(送信せずディスプレイ表示のみ)
        'ひとつ上の「.Send」をコメントアウトしてテストする際に使用する
'        .Display
    End With
End Sub

■メール情報を取得する

Sub GetMailItem()
'------------------------------------------------------
'ダイアログで取得したフォルダ内のメール情報を取得する
'------------------------------------------------------
    Dim olApp As Outlook.Application
    Dim olNamespase As Outlook.Namespace
    Dim olFolder As Outlook.Folder
    Dim i As Long    
    'Outlookmを起動する
    Set olApp = New Outlook.Application
    Set olNamespase = olApp.GetNamespace("MAPI")
    
    '対象フォルダを選択
    Set olFolder = olNamespase.PickFolder    
    '全てのアイテムに対して処理を行う
    For i = 1 To olFolder.Item.Count
        'メールアイテムの場合の処理
        If olFolder.Items(i).Class = olMail Then
            Debug.Print olFolder.Items(i).SenderName   '送信者名
            Debug.Print olFolder.Items(i).Subject      '件名
            Debug.Print olFolder.Items(i).ReceivedTime '受信日時
            Debug.Print olFolder.Items(i).Body         '本文
            Debug.Print "-------------------------------------"
        End If
    Next
End Sub

■参照設定せず遅延バインディングで新規メール送信する場合

Sub CreateNewMail()
 '-----------------------------------
 '新規メールを作成して送信する
 '-----------------------------------
   Dim olApp As Object
   Dim MailItem As Object   
   'Outlookを起動する
      Set olApp = CreateObject("Outlook.Application")   
    'メールを作成する
   Set MailItem = olApp.CreateItem(0)   
   With MailItem
    '送信先を指定する
    .Recipients.Add("Yamada@gmai.com").Type = 1
    '送信先CCを指定する
    .Recipients.Add("Suzuki@gmai.com").Type = 2
    .Subject = "申請書類回付のおしらせ"
    '本文を指定する
    .Body = "山田様" & vbCrLf _
        & "お世話になっております。" & "先日のご報告を" _
        & "させていただきます"""
        '添付ファイルを指定する
        .Attachments.Add ThisWorkbook.Path & "\Sample.xlsx"
        .Send
        'テスト用(送信せずディスプレイ表示のみ)
        'ひとつ上の「.Send」をコメントアウトしてテストする際に使用する
'        .Display
    End With
End Sub

※定数の値などの参考URL
Outlookフォーム作成/VBSプログラミング:アイテムの種類(定数/値) 一覧 - Outlookサポートナビ!