【Outlook VBA】Application_NewMailExイベントでメール受信時にメッセージを表示する方法


outlook,vba,Application_NewMailEx

みなさまこんにちは、ノグチです。

Outlookでは、メールを受信した時にと音やデスクトップ通知で教えてくれますよね。

でも音や通知だと見落としたり、別に報せなくてもいいメールも知らせてくれたりして、だんだんちゃんと見なくなっていったりして…

携帯電話の着信音みたいに、特定の条件にマッチしたメールを受信した時だけ、違う方法で教えてくれたりしないかなあ…

そんなお悩みを持つあなた、Outlook VBAならできるかもしれません!

今回は、Application_NewMailExイベントで、Outlookでメールを受信したらメッセージを表示する方法をご紹介します!

スポンサーリンク

Application_NewMailExイベント

Outlookでメールを受信した時に操作したい場合、Application_NewMailExイベントを使います。

このイベントは、Outlookがメールを受信するたびに実行されるイベントなので、メール受信時に何か処理をさせたいならば、このApplication_NewMailExイベントのイベントプロシージャ内に処理を差し込んでいきます。

引数EntryIDCollection

Application_NewMailExイベントには、引数EntryIDCollectionがあります。

メールや予定、カレンダーなど、Outlookのアイテムには、アイテムフォルダに保存されたタイミングで、必ず一意になるEntryIDというIDが付与されます。

Application_NewMailExイベントの引数は、このEntryIDをString型で渡してくれるのです。

GetItemFromIDメソッドでMailItemオブジェクトを取得

Outlookのアイテムに一意のIDが付与されること、Application_NewMailExイベントの引数でそのIDが渡されることは、上でご説明した通りです。

では今度は、引数で渡されたIDから受信したメールの情報を取得していきます。

使用するのは、NameSpaceオブジェクトのGetItemFromIDメソッド。

このメソッドは、NameSpace内で、引数に指定したEntryIDにマッチするアイテムを探して、取得したアイテムのオブジェクト型(メールならMailItemオブジェクト)で返してくれるメソッドです。

記述方法はこちら。

NameSpaceオブジェクト.GetItemFromID(EntryID)

Application_NewMailExイベント内で使用するなら、記述方法のEntryIDの部分はイベントプロシージャの引数、”EntryIDCollection”がそのまま入ります。

このように。

NameSpaceオブジェクト.GetItemFromID(EntryIDCollection)

NameSpaceオブジェクトについては下記記事でご紹介していますので、こちらも併せてご覧ください。

【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
GetNameSpaceメソッドでOutlookのデータフォルダにアクセスする方法をご紹介しています。このメソッドでOutlookのNameSpaceオブジェクトを取得すれば、メール、連絡先、予定表などのデータフォルダにアクセスして、更にその中のデータを読込んだり、エクセルシートに書き出したりすることができますよ。

条件にマッチしたメールを受信したらメッセージを表示する

ここまでご紹介したイベントとメソッドを使って、特定の条件を持ったメールを受信したらメッセージを表示するコードを書いてみましょう。

こんな感じになります。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objId As Object

Set myNamespace = GetNamespace("MAPI")
Set objId = myNamespace.GetItemFromID(EntryIDCollection)

If InStr(objId.Subject, "日報") Then
    MsgBox "日報が届きました!"
End If
End Sub

メールの件名に「日報」という文字が入っていたら、「日報が届きました!」というメッセージを表示するというコードです。

メールの情報は、GetItemFromIDメソッドで取得したMailItemオブジェクトのSubjectプロパティで取得しています。

では、こちらのメールを送信して、イベントが実行されるか試してみます。

outlook,vba,送信メール

上のメールを受信すると…

この通り、指定したメッセージが表示されますね。

outlook,受信メール,メッセージ

If文でMailItemオブジェクトのプロパティで取得できる値が条件とマッチするか?をチェックすればよいだけなので、条件にはSubjectプロパティ以外も使うことができますよ。

MailItemプロパティについては、下記記事でご紹介していますのでこちらをご覧ください。

【Outlook VBA】CurrentItemプロパティで今開いているメールのMailItemオブジェクトを取得する方法
Outlook VBAで、今開いているメールの添付ファイルをワンクリックで任意のフォルダに保存する方法を5ステップにわけて、連載記事でご紹介しています。今回は、InspectorオブジェクトのCurrentItemプロパティによるMailItemオブジェクトの取得についての説明です。

条件は吟味して!

さて、ここまでApplication_NewMailExイベントについてご紹介してきましたが、注意点があります。

それは、イベントで処理したいメールの条件はじっくり吟味しましょう!ということです。

このイベント、メールが届くたびに実行されます。

つまり、条件を広めにとってしまって、例えば上のようにメッセージを表示する処理をしていたとすると、メールが届く度にメッセージが表示されることに…

メッセージの「OK」ボタンを押さない限り、メッセージが表示されている間はOutlookの操作ができなくなりますから、これが頻繁に起こるとなるとはっきり言ってめちゃくちゃ鬱陶しいです。

折角の便利なイベントなので、欲張って鬱陶しくなるより、吟味した条件でスマートに使用していきたいですね。

最後に

今回は、Application_NewMailExイベントで、Outlookでメールを受信したらメッセージを表示する方法をご紹介しました。

毎日大量のメールが来ていると、欲しいメールがその中に埋もれがちになりますよね。

今回ご紹介した方法で、本当に欲しいメールの見落としを防いでみませんか?

それでは、最後までお読みいただきありがとうございました!

連載目次:Outlook VBAでメールを操作してみよう

メーラーとして名高く、そして便利なOutlook。

Outlookのメールだって、VBAで操作することができますよ。本シリーズでは、Outlookのメールを、VBAで操作する方法をご紹介していきます。

  1. 【Outlook VBA】メールの送信時イベントで確認ダイアログを表示する方法
  2. 【Outlook VBA】UnReadItemCountプロパティで受信フォルダの未読メール件数を取得する方法
  3. 【Outlook VBA】メール本文から欲しい情報だけを取り出す方法
  4. 【Outlook VBA】Application_NewMailExイベントでメール受信時にメッセージを表示する方法

タイトルとURLをコピーしました