プログラミング

★2024年最新★入門!Outlook誤送信防止をマクロで作ってみた

-プログラミング

Windowsユーザの方は標準のOutlookをメーラとして使う機会も多いと思います。

GmailであればChromeのプラグインでメール送信確認事も簡単にできます。

Outlookでも誤送信防止用のポップアップをOutlookで使えるようにマクロを使って誤送信防止確認ポップアップを実装したので、実装方法を共有します。

環境

今回説明で使用している環境は以下となります。

違うバージョンでも応用できると思うので試してみてください。

  • Windows 11 Home
  • Outlook (Officeアプリ)

Outlook用誤送信防止(送信確認ポップ)の実装手順

1.Outlookの開発リボン(マクロ)の有効化

デフォルトだとOutlookの開発リボンが無効になっているため、マクロを追加ができないので最初に開発リボンを有効化します。

  • ファイルをクリック
  • オプションをクリック
  • リボンのユーザ設定を選択して、右のボックスの開発にチェックを付け、OKをクリックする。
  • リボンに開発が追加されていればOKです。追加されていない場合はオプションでチェックが付いているか確認してください。

2.Outlookのに誤送信防止(送信確認ポップ)マクロを追加する

次に誤送信防止(送信確認ポップ)マクロを実装します。

  • リボンの開発からVisual Basicをクリックします。
  • マクロが開くので、左のボックスからThisOutlookSessionをダブルクリックして開きます。
  • 描きコードをコピペして保存します。メッセージなどは任意に変更してください。関数名のApplication_ItemSendは変更しないでください。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
On Error GoTo Exception

    Dim address As String
    Dim subject As String
    Dim attachment As String
    Dim popMessage As String
    Dim objRecipient As Recipient
    
    
    ' メールの件名の取得
    subject = Item.subject
    
    ' Item.Recipientsで全受信者を取得し、受信者ごとの表示名とメールアドレスを格納
    address = vbCrLf
    For Each objRecipient In Item.Recipients
        address = address & objRecipient.Name & "(" & objRecipient.address & ")" & vbCrLf
    Next
    
    ' Item.Attachmentsで添付ファイル情報を取得し、ファイル名を格納
    attachment = vbCrLf
    For Each objAttachment In Item.Attachments
        attachment = attachment & objAttachment.FileName & vbCrLf
    Next
    
    ' ポップアップメッセージ作成
    popMessage = "メール件名:" & vbCrLf & subject & vbCrLf & vbCrLf & "宛先:" & address & vbCrLf & "添付ファイル:" & attachment & vbCrLf & vbCrLf & "メールを送信してもよろしいですか?"
    
    If MsgBox(popMessage, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
        Cancel = True
    End If

On Error GoTo 0
    Exit Sub

Exception:
    MsgBox CStr(Err.Number) & ":" & Err.Description, vbOKOnly + vbCritical
    Cancel = True
    Exit Sub

End Sub

動作確認

最後に動作確認を行います。

  • 新規メールを作成して、送信ボタンをクリックします。
  • 確認用のポップアップが表示されればOKです。はいをクリックしないとメールの送信がされません。

以上で、実装完了です。

結構簡単なので、是非試してみてください!

補足:メール本文をポップアップに追加する場合


Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
On Error GoTo Exception

    Dim address As String
    Dim subject As String
    Dim attachment As String
    Dim popMessage As String
    Dim objRecipient As Recipient
    Dim body As String
    
    
    ' メールの件名の取得
    subject = Item.subject
    
    ' Item.Recipientsで全受信者を取得し、受信者ごとの表示名とメールアドレスを格納
    address = vbCrLf
    For Each objRecipient In Item.Recipients
        address = address & objRecipient.Name & "(" & objRecipient.address & ")" & vbCrLf
    Next
    
    ' Item.Attachmentsで添付ファイル情報を取得し、ファイル名を格納
    attachment = vbCrLf
    For Each objAttachment In Item.Attachments
        attachment = attachment & objAttachment.FileName & vbCrLf
    Next
    
    'メール本文取得
    body = Item.body
    
    ' ポップアップメッセージ作成
    popMessage = "メール件名:" & vbCrLf & subject & vbCrLf & vbCrLf & "宛先:" & address & vbCrLf & "本文:" & body & vbCrLf & "添付ファイル:" & vbCrLf & attachment & vbCrLf & vbCrLf & "上記の宛先に、メールを送信してもよろしいですか?"
    
    If MsgBox(popMessage, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
        Cancel = True
    End If

On Error GoTo 0
    Exit Sub

Exception:
    MsgBox CStr(Err.Number) & ":" & Err.Description, vbOKOnly + vbCritical
    Cancel = True
    Exit Sub

End Sub

QA回答:ポップアップを表示する差出人を指定する

差出人が
A
B
C
とあって、Aだけポップアップを出したい場合の対応

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
On Error GoTo Exception

    Dim address As String
    Dim subject As String
    Dim attachment As String
    Dim popMessage As String
    Dim objRecipient As Recipient
    
    
    ' メールの件名の取得
    subject = Item.subject
    
    ' Item.Recipientsで全受信者を取得し、受信者ごとの表示名とメールアドレスを格納
    address = vbCrLf
    For Each objRecipient In Item.Recipients
        address = address & objRecipient.Name & "(" & objRecipient.address & ")" & vbCrLf
    Next
    
    ' Item.Attachmentsで添付ファイル情報を取得し、ファイル名を格納
    attachment = vbCrLf
    For Each objAttachment In Item.Attachments
        attachment = attachment & objAttachment.FileName & vbCrLf
    Next
    
    ' ポップアップメッセージ作成
    popMessage = "メール件名:" & vbCrLf & subject & vbCrLf & vbCrLf & "宛先:" & address & vbCrLf & "添付ファイル:" & attachment & vbCrLf & vbCrLf & "メールを送信してもよろしいですか?"

' 差出人がAの場合のみポップアップを表示    
If Item.SendUsingAccount = "A" Then
  If MsgBox(popMessage, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
    Cancel = True
  End If
End If

On Error GoTo 0
    Exit Sub

Exception:
    MsgBox CStr(Err.Number) & ":" & Err.Description, vbOKOnly + vbCritical
    Cancel = True
    Exit Sub

End Sub

送信者の名前を取得してポップアップを出したい送信者の場合は表示するみたいな方法でいける気がします。
If MsgBox(popMessage, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
Cancel = True
End


If Item.SendUsingAccount = "A" Then
If MsgBox(popMessage, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
Cancel = True
End If
End If

のように書き換える。
Aの部分に送信者の名前を入れる感じです。(メールアドレスではなく名前です)

-プログラミング