受信トレイなどのサブフォルダーを共有する方法

Exchange サーバー環境では、受信トレイだけでなくそのサブフォルダーについても他の人に参照などのアクセス権を与えることが可能です。
しかし、参照する側でそのフォルダーを開こうとしても、[他のユーザーのフォルダーを開く] ではフォルダーの種類として既定のフォルダーしか選択ができません。
メールボックス全体にアクセス権を与えればサブフォルダーもアクセスできますが、この場合はメールボックスのすべてのフォルダーにアクセス可能となってしまいます。

では、アクセス許可を与えたサブフォルダーのみを共有するにはどうすればよいのでしょうか?

例えば、受信トレイの下にある「共有用」というフォルダーを参照させるためには、まず共有する側で以下のアクセス権を設定します。

  • メールボックスのルート フォルダー (フォルダーツリーの一番上のフォルダー): [フォルダーの表示] のみ
  • 受信トレイ: [フォルダーの表示] のみ
  • 共有用: 他のユーザーに許可したいアクセス権

そして、参照する側では [アカウント設定] の Exchange アカウントの [その他の設定] の [詳細設定] タブで、[メールボックス] にある [追加] をクリックし、共有されたフォルダーがあるメールボックスを追加します。
これにより、フォルダーの一覧に追加されたメールボックスが表示され、アクセス権があるフォルダーのみが表示されるようになります。

ハイブリッド環境におけるメッセージ取り消し

Exchange Online においては、クラウドベースのメッセージ取り消しにより、送信したメールの取り消しが可能です。
しかし、この機能はあくまでも送信者と受信者の両方のメールボックスが Exchange Online 上にある必要があります。
そのため、ハイブリッド環境においては、メッセージの取り消しには以前からある Outlook 自体のメッセージ取り消しを使用します。
ただ、メッセージの取り消しというメッセージが届いても、メッセージの取り消しが行われないことがあります。
これは、Exchange の TNEF の設定によるものです。

Outlook のメッセージ取り消しにおいては、通常のメッセージ クラス (IPM.Note) とは異なるメッセージ クラス (IPM.Outlook.Recall) により取り消しメッセージが送信されます。
このような特殊なメッセージ クラスのメールについて Exchange 組織外に送信する場合、TNEF を有効にして送信する必要があります。
そして、ハイブリッド環境においては、オンプレから Exchange Online および Exchange Online からオンプレのいずれの送信も組織外として扱われます。
そのため、例えば Get-RemoteDomain の既定の設定で TnefEnabled が $false となっているような場合、オンプレと Exchange Online 間の送信にもその設定が反映され、TNEF が無効となるので、メッセージの取り消しメッセージが通常のメッセージとして扱われ、取り消しが行われないことになります。

これを回避するには New-RemoteDomain (既存の設定があるなら Set-RemoteDomain) でオンプレまたは Exchange Online のドメインを指定して TnefEnabled に $true を設定します。
例えば、contoso.com というカスタム ドメインを使用している Microsoft 365 テナントのドメインが contoso.onmicrosoft.com だった場合、オンプレと Exchange Online でそれぞれ以下のような設定を行います。

オンプレ

New-RemoteDomain -DomainName contoso.onmicrosoft.com -Name ExO

Exchange Online

New-RemoteDomain -DomainName *.contoso.com -Name OnPrem

Exchange 環境においてはメッセージの取り消し以外にも TNEF が有効でなければ正常に動作しないものがありますので、ハイブリッド環境であれば上記の設定はあらかじめ行っておいたほうがトラブルを未然に防ぐことができるでしょう。
ただ、オンプレと Exchange Online の間にサードパーティ製のメールスキャンを行うようなゲートウェイがあり、その製品が TNEF に対応していない場合、メールの送受信に問題が生じる可能性があります。
そのような製品を使用している場合は、TNEF に対応している製品に置き換えるか、残念ながらメッセージの取り消し機能を使用するのはあきらめることになるでしょう。

Outlook で ESC キーを無効にする方法

コメントにて以下のご要望をいただきました。


お世話になります。いつも有用かつ豊富な情報のご提供をいただき、ありがとうございます。
ドラフトの作成途上で誤って Escapeキーを押してしまい、メールを消失することを避けたいです。
Escapeを押した時点で、「変更を保存しますか」と聞かれますので、ここで[はい]ボタンを押せば問題ないのですが、つい誤って、[いいえ]を押してしまい、メールを消失することのないように
マクロで制御することはできませんでしょうか。
オプションでの自動保存は1分に設定していますが、運悪くこの狭間で大きな変更を行ったメールを消してしまうことを何度も経験しました。
よろしくお願いいたします。


ご要望の動作をマクロで実装するとなると、アイテム単位のイベントを使用する必要があり、かなり面倒なことになります。
しかし、単に ESC キーを無効にするというだけなら、マクロではなくても実現は可能です。

Office 製品のグループ ポリシーには DisabledShortcutKeysList という設定があり、これを設定すると特定のショートカット キーを無効にすることができます。
例えば、Outlook で ESC キーを無効にするには以下の設定を行います。

キー: HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Office\16.0\Outlook\DisabledShortcutKeysList
名前: KeyMod1
種類: REG_SZ
データ: 27,0

データの “27” は ESC キーのキャラクター コードを表し、”,0″ は SHIFT や CTRL は使用しないことを意味します。
なお、この設定で無効化できるのはあくまでも Outlook における ESC キーのショートカットのみであり、Outlook 以外のアプリケーションや、Outlook であっても文字入力中の ESC キーなどは無効になりません。

OST ファイルのサイズを小さく保つためには

Outlook をキャッシュ モードを使用していると、ユーザー プロファイルに含まれる OST ファイルが徐々に大きくなっていきます。
VDI 環境などでユーザー プロファイルの領域に制限がある場合や、ローカル ディスクのサイズが小さい場合には、OST ファイルのサイズを制限したくなるでしょう。
そこで、「OST ファイルのサイズを制限する」というようなキーワードで検索すると、以下のページが見つかります。

Outlook の .pst ファイルと .ost ファイルの両方のサイズ制限を構成する方法 – Microsoft サポート

ところが、このページに記載の方法でサイズを制限した場合、OST ファイルのサイズがその制限にかかると、メールの送受信ができなくなってしまいます。
というのも、OST ファイルのサイズ制限に達した際の Outlook の動作は、古いアイテムを削除するという動作ではなく、単にデータの書き込みを拒否するというものだからです。
したがって、OST ファイルのサイズを増やさないようにするには、キャッシュされるデータを減らすしかないのです。

例えば、以下のような方法でキャッシュされるデータを減らすことが可能です。

  • キャッシュされる期間を短くする
  • [共有予定表の強化を有効にする] をオフにする
  • [共有フォルダーをダウンロード] をオフにする
  • 参照する共有予定表の数を減らす

なお、上記の設定を変更しても、すぐには OST ファイルのサイズは減らず、Outlook の動作中にアイドル時間で少しずつサイズが小さくなっていきます。
もし、すぐにサイズを減らしたい場合は、[Outlook データ ファイルの設定] の [今すぐ圧縮] により圧縮する必要があります。
詳細は以下のページを参照してください。

メールボックスと Outlook データ ファイル (.pst および .ost) のサイズを小さくする – Microsoft サポート

Outlook 2016 以降でメールを送信すると添付ファイルが消えたり、WINMAIL.DAT というファイルになる問題

以前、Outlook 2010/2007/2003 でメールを送信すると添付ファイルが消えたり、WINMAIL.DAT というファイルになる問題というタイトルで公開していた現象について Outlook 2016 以降に対応したものを再度掲載します。

Outlook でメールを送信した場合によく発生するトラブルとして以下のようなものがあります。

  • Outlook 以外で受信すると添付ファイルがなくなる。
  • 添付ファイルをつけていないのに、WINMAIL.DAT というファイルがつく。
  • 添付ファイルが WINMAIL.DAT というファイルに置き換わってしまい開けない。

これらはすべて Outlook が Transport Neutral Encapsulation Format (以下、TNEF) というフォーマットによりメールを送信することで発生しています。
この記事では、TNEF の概要と使われる条件、回避策について記述しています。

TNEF の概要

TNEF とはメールの送受信に使われるプロトコルに依存せず (Transport Neutral) に、Outlook の処理に必要なデータをカプセル化 (Encapsulation) して送信する形式 (Format) のことであり、カプセル化されたデータは WINMAIL.DAT というファイル名で添付されます。受信側が Outlook (Outlook Express ではなく Office シリーズの Outlook) や Exchange Server を使用していた場合、この WINMAIL.DAT をデコードすることで、Outlook 固有のさまざまな機能やプロパティを正しく送信することが可能になります。

しかし、添付ファイルのデータも WINMAIL.DAT にカプセル化されてしまうため、TNEF を認識できないメールソフトで受信した場合には添付ファイルが WINMAIL.DAT に置き換わったように見えます。
また、一部のメール プログラムは WINMAIL.DAT を解読できないことがわかっているため、その添付ファイルを無かったものとしてしまい、添付ファイルを表すマークすら表示しません。
そのため、「添付ファイルが削除された」と勘違いされる方もいますが、実際には添付ファイル自体は削除されず残っているので、スクリプトを使えば添付ファイルを取り出すことが可能です。

なお、この現象は Outlook の不具合と受け止められることが多いのですが、基本的には Outlook 固有の機能を使った場合にデータの損失を防ぐための仕様になります。

TNEF が使われる条件

では、どのような場合に TNEF になってしまうのでしょうか?
TNEF は以下のような場合に使用されます。

  1. Outlook のリッチテキスト形式をメールを作成した場合
    インターネットで一般的に使用されている本文のフォーマットはテキスト形式または HTML 形式であるため、Outlook のリッチテキスト形式で作成されたメールは TNEF で送信するか、HTML 形式などに変換する必要があります。
    既定では自動的に HTML 形式に変換されるのですが、HTML 形式に変換できないデータが含まれている場合には TNEF で送信されます。たとえば、ページの色や Excel の埋め込みオブジェクトなどが変換できないデータになります。
  2. あて先や Cc などに指定した受信者のアドレスのプロパティで [インターネット メール形式] が [Outlook リッチ テキスト形式で送信] になっている場合
    メールの形式をテキストや HTML にしたとしても、アドレスのプロパティで [Outlook リッチ テキスト形式で送信] が選択されている場合、その受信者には TNEF で送信されます。この場合、受信者が Outlook を使っていると送信者が作成した形式で表示されます。たとえば、HTML 形式のメールをこのオプションで送信した場合、受信者が Outlook を使っていれば HTML 形式で表示され、Outlook 以外であればテキスト形式で表示されます。
    既定では [インターネット メール形式] は [最適な送信形式を自動的に選択する] になっているはずですが、TNEF で送信されたメールに返信したり、Exchange 環境で Exchange のアドレス帳からあて先を選択した場合に、リッチテキスト形式で送信するような設定となっている場合があります。
  3. メールに特殊なプロパティが設定されていた場合
    メール フォームをカスタマイズしていたり、OFT や MSG として保存したメールをテンプレートとしてメールを作成したような場合に、通常設定されないプロパティが設定されることがあり、このような場合も TNEF が使われます。たとえば、投票ボタンを設定すると TNEF で送信されます。
    なお、アドインなどにより意図せずプロパティが設定されることもあり、そのようなプロパティが設定されているかどうかを確認することは困難です。

注意しなければならないのは、2. や 3. の条件に合致するとメールの形式をリッチテキスト形式以外にしても TNEF 形式になることがあるという点です。

TNEF が送信される現象の回避策

回避策はメール アカウントとしてインターネット アカウントを使用している場合と、Exchange サーバーを使用している場合で異なります。

POP/IMAP のようなインターネット アカウントを使用している場合

インターネットのアカウントを使用している場合は、以下のようなレジストリを設定することで、どのような場合でも TNEF を使用しないよう強制することができます。

レジストリ キー: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Preferences
データの名前: DisableTNEF
データの種類: DWORD
データの値: 1

レジストリ操作が不安だという方は、上記の設定を行うスクリプトを作成しましたので、下記のリンクをクリックして VBS ファイルをダウンロードし、こちらを実行してください。

DisableTNEF2016.vbs

Exchange サーバーを使用している場合

Exchange サーバーではサーバー側の設定により TNEF での送信を完全に禁止することができます。設定はリモート ドメイン単位で行えるため、Exchange サーバーを使用している組織には TNEF での送信を許可し、それ以外には TNEF での送信を禁止するということも可能です。

リモート ドメインでの TNEF 設定の詳細については、以下の URL を参照してください。

Set-RemoteDomain (ExchangePowerShell) | Microsoft Docs

回避策による副作用

上記の設定を行って TNEF での送信を無効にすると、以下のような制限事項が発生しますので、ご注意ください。

  • 投票ボタンの機能が使用できない。
  • 仕事の依頼ができない。
  • Outlook 2002 以前の Outlook に会議出席依頼を送信しても、テキスト形式の通常のメッセージになる。
  • カスタムフォームが送信できない。
  • Excel ワークシートの一部などを OLE オブジェクトとして埋め込んで送信することができない。

参考情報

Outlook 2007 および 2010 でメールを送信すると、受信者側に Winmail.dat というファイルが添付される (microsoft.com)

メールのメッセージ形式が Outlook のインターネット メールのメッセージに与える影響 (microsoft.com)

Outlook フラグ活用ガイド: 受信メールにフラグとアラームを設定するマクロ

Outlook の自動仕分けルールを使うと、受信したメールのフラグをつけることが可能ですが、アラームを設定することができません。
また、件名に含まれるキーワードでフラグをつけるようにしていると、返信が繰り返されるたびにフラグが設定されてしまいます。

そこで、メールの受信時に特定の条件に合致すると、その条件に応じてフラグとアラームを設定し、同じスレッドのメールがある場合はそれらのフラグをクリアするマクロを作成しました。

重要なメールは受信してすぐにアラームを出し、それほど重要でない場合はちょっと時間をおいてアラームを出すようにしています。
また、営業時間外にメールを受信した場合は翌営業日の朝にアラームを設定します。
必要に応じて条件を追加・削除したり、アラームまでの時間を調整したりしてください。

なお、ワンクリックでフラグのアラームを設定するマクロ を使用している場合は赤字のコードが重複するので、これを取り除いてコピーしてください。

'
Const START_TIME = " 9:00"
Const END_TIME = " 17:00"

Const START_HOUR = 9
Const END_HOUR = 17
'
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
     Dim objItem As Object
     '
     Set objItem = Session.GetItemFromID(EntryIDCollection)
     If objItem.MessageClass = "IPM.Note" Then
         Dim mlItem As MailItem
         Set mlItem = objItem
         CheckAndFlag mlItem
     End If
End Sub
' アイテムの内容に応じてフラグをセットする
Public Sub CheckAndFlag(ByRef objItem As MailItem)
     Dim oneRec As Recipient
     ' 重要度が高なら 5 分後
     If objItem.Importance = olImportanceHigh Then
         MarkAsTask objItem, 5
         Exit Sub
     End If
     ' 件名が重要、緊急などの文字列で始まっていたら 5 分後
     Dim arrUrgent As Variant
     Dim strUrgent As Variant
     arrUrgent = Array("重要*", "緊急*", "至急*", "大至急*")
     For Each strUrgent In arrUrgent
         If objItem.Subject Like strUrgent Then
             MarkAsTask objItem, 5
             Exit Sub
         End If
     Next
     ' 特定の差出人からのメールは 10 分後
     Dim arrSender As Variant
     Dim strSender As Variant
     arrSender = Array("Manager Name", "Manager Name2")
     For Each strSender In arrSender
         If objItem.SenderName = strSender Then
             MarkAsTask objItem, 10
             Exit Sub
         End If
     Next
     ' 自分宛てのメールは 15 分後
     For Each oneRec In objItem.Recipients
         If oneRec.Address = Session.CurrentUser.Address Then
             ' 重要度が低ならアラームは設定しない
             If objItem.Importance = olImportanceLow Then
                 Exit For
             End If
             MarkAsTask objItem, 15
             Exit Sub
         End If
     Next
     ' 件名に特定の文字列を含むメールは 60 分後
     Dim arrProject
     Dim strProject
     arrProject = Array("*ProjectA*", "*ProjectB*", "*ProjectC*")
     For Each strProject In arrProject
         If objItem.Subject Like strProject Then
             MarkAsTask objItem, 60
             Exit Sub
         End If
     Next
End Sub
' 分単位でアラームを設定する処理
Sub MarkAsTask(objItem As MailItem, iTime As Integer)
     On Error Resume Next
     Dim w
     Dim dtRemind
     Dim h
     Dim strTime
     ' スレッドの他のメールのフラグをクリア
     ClearFlagsOnConversation objItem
     '
     With objItem
         ' 今日の曜日を取得
         w = Weekday(Now)
         ' 土日に受信したメールについては月曜日の業務開始時間
         If w = vbSaturday Then
             dtRemind = DateAdd("d", Now, 2)
             strTime = START_TIME
         ElseIf w = vbSunday Then
             dtRemind = DateAdd("d", Now, 1)
             strTime = START_TIME
         Else
             ' 現在の時刻を取得
             h = Hour(Now)
             If h < START_HOUR Then
             ' 業務開始前に受信したメールは業務開始時
                 dtRemind = Now
                 strTime = START_TIME
             ElseIf h >= END_HOUR Then
             ' 業務終了後に受信したメールは翌日
                 strTime = START_TIME
                 If w = vbFriday Then
                     ' 金曜日なら月曜日に
                     dtRemind = DateAdd("d", 3, Now)
                 Else
                     dtRemind = DateAdd("d", 1, Now)
                 End If
             Else
                 ' 現在時刻に指定された分を追加
                 dtRemind = DateAdd("n", iTime, Now)
                 ' アラームが業務終了後になるなら、業務終了時に
                 If h >= END_HOUR Then
                     strTime = END_TIME
                 Else
                     strTime = " " & FormatDateTime(dtRemind, vbShortTime)
                 End If
             End If
         End If
         dtRemind = FormatDateTime(dtRemind, vbShortDate) & strTime
         MarkAsTaskCore objItem, olMarkToday, dtRemind
     End With
End Sub
' スレッドの全てのメールのフラグをクリア
Private Sub ClearFlagsOnConversation(objItem As MailItem)
     Dim objConv As Conversation
     Dim colRootItems As SimpleItems
     Dim objRootItem As Object
     Set objConv = objItem.GetConversation
     Set colRootItems = objConv.GetRootItems()
     For Each objRootItem In colRootItems
         ClearFlagsRecursive objRootItem, objConv
     Next
End Sub
' 再帰的にフラグをクリアする
Private Sub ClearFlagsRecursive(objRootItem As Object, objConv As Conversation)
     Dim colItems As SimpleItems
     Dim objItem As Object
     Set colItems = objConv.GetChildren(objRootItem)
     If colItems.Count > 0 Then
         For Each objItem In colItems
             If TypeName(objItem) = "MailItem" Then
                 ClearFlagsRecursive objItem, objConv
             End If
         Next
     End If
     With objRootItem
         If .IsMarkedAsTask Then
             .ClearTaskFlag
             .Save
         End If
     End With
End Sub

' フラグ設定の共通処理
Private Sub MarkAsTaskCore(ByVal objItem As Object, mkInt As OlMarkInterval, ByVal dtRemind As Date)
     Dim dtDue As Date
     dtDue = FormatDateTime(dtRemind, vbShortDate)
     With objItem
         .MarkAsTask mkInt
         .FlagStatus = olFlagMarked
         .FlagRequest = "ご確認ください"
         .TaskStartDate = Now
         .TaskDueDate = dtDue
         .ReminderTime = dtRemind
         .ReminderSet = True
         .Close olSave
     End With
End Sub

マクロの登録方法やメニューへの追加について

Outlook フラグ活用ガイド: ワンクリックでフラグのアラームを設定するマクロ

Outlook でフラグを設定する方法はマイクロソフトのサポート技術情報の「カテゴリ、フラグ、リマインダー、色を設定する」で説明されていますが、アラームを設定するには数回クリックする必要があります。

そこで、ワンクリックでアラームを設定できるようにするマクロを作成しました。

以下のそれぞれのマクロをリボンやクイック アクセス ツールバーに登録しておくことで、メッセージ一覧で選択したメールにフラグとアラームを設定できます。

名前 動作
FollowSelected1Hour 現在時刻から 1 時間後にアラーム
FollowSelected2Hours 現在時刻から 2 時間後にアラーム
FollowSelected3Hours 現在時刻から 3 時間後にアラーム
FollowSelectedByEndOfTheDay その日の業務終了直前にアラーム
FollowSelectedByTomorrow 翌日の業務開始時にアラーム
FollowSelectedByEndOfWeek その週の金曜日にアラーム
FollowSelectedByNextWeek 一週間後にアラーム
FollowSelectedSpecified アラームの日時を入力して設定

マクロは以下のようになります。

'
Const START_TIME = " 9:00" ' 業務開始時刻を指定 (時刻の前にスペースが必要)
Const END_TIME = " 17:00" ' 業務終了時刻を指定 (時刻の前にスペースが必要)
' 1 時間後にアラーム
Public Sub FollowSelected1Hour()
     FollowSelectedHoursCore 1
End Sub
' 2 時間後にアラーム
Public Sub FollowSelected2Hours()
     FollowSelectedHoursCore 2
End Sub
' 3 時間後にアラーム
Public Sub FollowSelected3Hours()
     FollowSelectedHoursCore 3
End Sub
' 数時間後にアラーム設定する共通処理
Private Sub FollowSelectedHoursCore(iHour As Integer)
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     dtRemind = DateAdd("h", iHour, Now)
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkToday, dtRemind
     Next
End Sub
' その日の終わりにアラーム
Public Sub FollowSelectedByEndOfTheDay()
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     dtRemind = FormatDateTime(Now, vbShortDate) & END_TIME
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkToday, dtRemind
     Next
End Sub
' 翌日にアラーム (金曜日なら月曜日に設定)
Public Sub FollowSelectedByTomorrow()
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     If Weekday(Now) = 6 Then
         dtRemind = DateAdd("d", 3, Now)
     Else
         dtRemind = DateAdd("d", 1, Now)
     End If
     dtRemind = FormatDateTime(dtRemind, vbShortDate) & START_TIME
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkTomorrow, dtRemind
     Next
End Sub
' 今週中にアラーム
Public Sub FollowSelectedByEndOfWeek()
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     If Weekday(Now) <= 6 Then
         dtRemind = DateAdd("d", 6 - Weekday(Now), Now)
     Else
         dtRemind = DateAdd("d", 12 - Weekday(Now), Now)
     End If
     dtRemind = FormatDateTime(dtRemind, vbShortDate) & START_TIME
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkTomorrow, dtRemind
     Next
End Sub
' 一週間後にアラーム
Public Sub FollowSelectedByNextWeek()
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     dtRemind = FormatDateTime(DateAdd("d", 7, Now), vbShortDate) & START_TIME
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkNextWeek, dtRemind
     Next
End Sub
' 任意の日時にアラーム
Public Sub FollowSelectedSpecified()
     On Error Resume Next
     Dim objItem 'As MailItem
     Dim dtRemind As Date
     dtRemind = InputBox("アラーム日時:")
     If InStr(dtRemind, ":") = 0 Then
         dtRemind = dtRemind & START_TIME
     End If
     For Each objItem In ActiveExplorer.Selection
         MarkAsTaskCore objItem, olMarkToday, dtRemind
     Next
End Sub
' フラグ設定の共通処理
Private Sub MarkAsTaskCore(ByVal objItem As Object, mkInt As OlMarkInterval, ByVal dtRemind As Date)
     Dim dtDue As Date
     dtDue = FormatDateTime(dtRemind, vbShortDate)
     With objItem
         .MarkAsTask mkInt
         .FlagStatus = olFlagMarked
         .FlagRequest = "ご確認ください"
         .TaskStartDate = Now
         .TaskDueDate = dtDue
         .ReminderTime = dtRemind
         .ReminderSet = True
         .Close olSave
     End With
End Sub

マクロの登録方法やメニューへの追加について

Outlook フラグ活用ガイド: フラグの概要

受信したメールで未処理のものを未読に戻す、というような方法でメールを管理している人はいませんか?
Outlook にはフラグという機能があり、重要なメールや処理が必要なメールにフラグをつけて管理することができます。
他のメール クライアントや Gmail のような Web メールでもフラグやスターという名前でメールに目印をつけることができますが、Outlook のフラグは他にはない様々な特長があります。
今日は Outlook のフラグの特長とそれを使用した活用方法を紹介します。

特長 1: フラグに期限やアラームを設定できる

フラグ付きのメールが多くなってくると、どのメールから処理をすべきかという優先順位付けが必要になってきます。
Outlook のフラグでは期限やアラームを設定することができるので、期限を設定して期限が近いメールから処理したり、期限まで時間があっても早めに取り掛かる必要があるものについては開始すべき時間にアラームを設定するといった方法で優先順位をつけることができます。

特長 2: To Do バーでタスクとともにフラグ付きのメールが表示される

Outlook には To Do バーにタスクを表示する機能がありますが、To Do バーのタスクには、タスク フォルダーのアイテムだけでなくフラグをつけたメールも表示されます。
そのため、To Do バーに予定表とタスクを表示しておけば、今日の予定と今日処理すべきタスクとメールが常に Outlook の右側に表示されるようになります。

特長 3: Microsoft To Do アプリと連携する

Outlook.com や Exchange Online 環境で Outlook を使用している場合、フラグを付けたメールは Microsoft To Do アプリでフラグを設定したメールとして表示されます。
受信トレイ以外のフォルダーに振り分けたメールもまとめて表示されるので、PC が使用できない状況でもスマホの To Do アプリでフラグ付きメールを確認して仕事を進めることができます。

リモートワークが行われるようになり、仕事の依頼をメールで受けることが多くなってきているのであれば、Outlook のメールのフラグとタスクで仕事をまとめて管理することで効率があがるでしょう。
来週はフラグをさらに使いやすくするマクロを紹介します。

メッセージ一覧に差出人のアドレスを表示する方法

Outlook では、メッセージ一覧に表示するフィールドとして [差出人] を選択すると差出人が表示名で表され、アドレスが表示されません。
また差出人アドレスに該当するようなフィールドも一覧にはありません。
そのため、メッセージ一覧に差出人のアドレスを表示するには、以下のような手順が必要となります。

  1. [表示]-[ビューの設定] をクリック

  2. [列] をクリック

  3. [新しい列] をクリック

  4. 以下の通りフィールドを設定し、[OK] をクリック
    名前: 差出人アドレス
    種類:
    式: [電子メール アドレス差出人]

  5. [OK] をクリック

式に追加する文字列の [] は半角文字となることや、「電子メール」と「アドレス差出人」の間には半角スペースが必要となることにご注意ください。

なお、Exchange 環境では差出人が Exchange 組織内にいる場合はアドレスが /O= で始まる Exchange の内部形式 (LegacyExchangeDN) となります。

決まった時間に定型メールを自動生成する方法

コメントにて以下のご要望をいただきました。


お世話になっております。
以下を自動的に実行するためのマクロをご教示いただけますと幸いです。
・毎日決まった時間、決まった宛先に、決まった本文・件名のメールを送付する。

また、自動的にではなく、上記のメールを定期的に作成するマクロでも大丈夫です
(あとは、使用者が送信ボタンを押すだけ)
お手数をおかけしますが、どうぞよろしくお願いいたします。


宛先や件名、本文が定型のメールを作成するだけなのであれば、マクロの必要はありません。
まず、Outlook で新規のメールを作成し、宛先や件名、本文を設定したら、[ファイル] の [名前を付けて保存] でファイルの種類として [Outlook テンプレート (*.oft)] を選択し、任意のフォルダーに保存します。
このようにして保存した OFT ファイルをダブルクリックで開くと、定型メールが新規作成されます。

これを毎日決まった時間に自動実行するには、Windows のタスク スケジューラを使用します。
タスク スケジューラで決まった時間に OFT ファイルを開くための設定手順は以下の通りです。

  1. スタートメニューの [Windows 管理ツール] を展開し、[タスク スケジューラ] をダブルクリックで開きます。
  2. [タスク スケジューラ (ローカル)] を右クリックし、[基本タスクの作成] をクリックします。
  3. [名前] と [説明] に適切な文字列を入力し、[次へ] をクリックします。
  4. 曜日に関係なく実行する場合は [毎日] を、平日だけ実行する場合は [毎週] を選択して [次へ] をクリックします。
  5. 翌日以降の実行したい時刻を選択し、[毎週] を選択した場合は実行する曜日のチェックボックスをオンにして [次へ] をクリックします。
  6. [プログラムの開始] を選択して [次へ] をクリックします。
  7. [プログラム/スクリプト] の右の [参照] ボタンをクリックし、Outlook で保存した OFT ファイルを選択して [開く] をクリックします。
  8. [プログラム/スクリプト] に OFT ファイルのフルパス名が含まれていることを確認して [次へ]  をクリックします。
  9. [完了] をクリックします。

プログラムやスクリプトを指定するところで OFT のファイルを指定していますが、OFT がスクリプトになっているわけではなく、ファイル名を指定すると関連付けられたアプリがタスク スケジューラで自動的に実行されるのです。