技術情報 (Exchange Online)

Exchange Online

Exchange Online、Outlook に関する技術情報です。

Telnet で日本語のメールを送信する

以下手順により、Telnet で日本語のメールを送信する事が可能です。
Exchange Online とは直接関係ありませんが、メールの基本的な動作となるため記載しておきます。

  1. コマンドプロンプトを起動し、telnet コマンドで SMTP サーバーに接続します。
    telnet “SMTP サーバーの FQDN” 25
    helo
    mail from:”差出人の SMTP アドレス” (envelope from)
    rcpt to:”宛先の SMTP アドレス” (envelope to)
  2. data コマンドでデータを送信することを指定します。
    data
  3. ヘッダ部を入力します。
    from:”差出人の SMTP アドレス” (header from)
    to:”宛先の SMTP アドレス” (header to)
    Subject:=?ISO-2022-JP?B?GyRCRnxLXDhsJWEhPCVrJE43b0w+JEckOSEjGyhC?=
    Mime-Version: 1.0
    Content-Type: text/plain ; charset=”iso-2022-jp”
    Content-Transfer-Encoding: base64
  4. 一行空けて、ボディ部 (本文) を入力します。
    空行を作ることでヘッダとボディが分割されます。GyRCJDMkTiVhITwlayRPGyhCYmFzZTY0GyRCJEclKCVzJTMhPCVJJDUkbCRGQXc/ LiQ1JGwkXiQ3JD8hIxsoQg==

Subject

この例では以下の形式で日本語がエンコードされています。

charset: ISO-2022-JP
encoding: B (base64)

上記を以下の形式に当てはめたものがエンコードされた件名になります。

=?charset?encoding?encoded-text?=

この件名は日本語では「日本語メールの件名です。」となり、iso-2022-jp の「日本語メールの件名です。」を Base64 でエンコードすると「GyRCRnxLXDhsJWEhPCVrJE43b0w+JEckOSEjGyhC」という文字列になります。
日本語を Base64 エンコードする方法は複数ありますが、簡単な方法は以下です。

  1. コマンドプロンプトを起動します。
  2. 以下のコマンドを入力し、ファイルはテキストファイル形式を指定します。
    certutil -f -encode “エンコード前ファイルパス” “エンコード後ファイルパス”
  3. “エンコード後ファイルパス” に作成されたテキストファイルを開きます。

※ “エンコード前ファイルパス” のテキストファイルは ISO-2022-JP (JIS) 形式で保存されている必要があります。notepad は非対応なのでサクラエディタ等が必要です。
※ “エンコード後ファイルパス” はファイルが存在している必要はありません。

Mime-Version

MIME は SMTP で日本語を取り扱うための規格です。
MIME のバージョンを表示しています。

Content-Type

ボディ部 (メール本文) のファイルの種類を指定するヘッダです。
テキスト形式であるとか、HTML 形式である等の情報です。
日本語メールを送信する場合 text/plain になります。
text/plain の場合にはその文字コードを表す charset が追加されます。
この例では charset には「iso-2022-jp」が指定されています。一般的に文字化け等の問題が発生しずらいのは「iso-2022-jp」とされています。

Content-Transfer-Encoding

ボディ部 (メール本文) のエンコード形式が記述されている場所です。
この例では base 64 のルールに従って変換したという意味です。

以下の種類があります。

  • 7 bit
  • 8 bit
  • binary
  • base 64
  • quoted-printable

上の 3 つは、それぞれ以下の意味になっており、データの種類を表します。
メール本文の変換は、特に行われていません。

7 bit : 7 bit のデータ
8 bit : 8 bit のデータ
binary : バイナリデータ

それに対して、下 2 つは変換方法を表します。

base 64 : base 64 のルールに従って変換
quoted-printable : quoted-printable のルールに従って変換

ボディ

正常にデコードされると以下のメールが配信されます。
画像

上記メールのソース (ヘッダ、ボディ) は以下のようになります。Return-Path: “envelope from で指定した SMTP アドレス”

メールが経由した SMTP サーバーの情報

from: testuser@testdom.com
to: UserA@akbmacha.com
Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsJWEhPCVrJE43b0w+JEckOSEjGyhC?=
Mime-Version: 1.0
Content-Type: text/plain ; charset=”iso-2022-jp”
Content-Transfer-Encoding: base64
Date: Thu, 1 Mar 2018 16:41:37 +0900
Message-ID: <メッセージ ID>

GyRCJDMkTiVhITwlayRPGyhCYmFzZTY0GyRCJEclKCVzJTMhPCVJJDUkbCRGQXc/ LiQ1JGwkXiQ3JD8hIxsoQg==


Outlook (例は Outlook 2016) では以下のレジストリを変更する事でソース表示が可能になります。
キーが存在しない場合は作成します。

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Options\Mail

以下の名前、値で新規 DWORD (32ビット) 値を作成します。

[値の名前(N):]
SaveAllMIMENotJustHeaders

[値のデータ(V):]
1

HTML 形式のメールを送信する

Content-Type: text/plain を Content-Type: text/html に変更し、以下のような本文の文字列を base64 等でエンコードする事で送信可能です。

<span style=”color:red;”> 赤い文字。</span>

以下 Telnet コマンドで HTML 形式のメールを送信するサンプルです。
通常、HTML メールを解釈できないメーラーで受信する事も想定し、テキストパートも同時に含めます。
そのために必要な Content-Type は multipart/alternative です。
boundary でパートを分割します。

telnet “SMTP サーバーの FQDN” 25
helo
mail from:”差出人の SMTP アドレス” (envelope from)
rcpt to:”宛先の SMTP アドレス” (envelope to)
data
from:”差出人の SMTP アドレス” (header from)
to:”宛先の SMTP アドレス” (header to)
Subject:=?ISO-2022-JP?B?GyRCRnxLXDhsJWEhPCVrJE43b0w+JEckOSEjGyhC?=
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=”hogehogehoge”

–hogehogehoge
Content-Type: text/plain ; charset=”iso-2022-jp”
Content-Transfer-Encoding: base64

SFRNTCAbJEI3QTwwJE4lYSE8JWskRyQ5ISMbKEINCkhUTUwgGyRCJEtCUDF+JDck
RiQkJEokJCVhITwlaSE8JE4+bDlnJE8lRiUtJTklSCRHST08KCQ1JGwkXiQ5ISMb
KEI=

–hogehogehoge
Content-Type: text/html ; charset=”iso-2022-jp”
Content-Transfer-Encoding: base64

PHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPkhUTUwgGyRCN0E8MCROJWEhPCVrJEck
OSEjGyhCPGJyPkhUTUwgGyRCJEtCUDF+JDckRiQkJEokJCVhITwlaSE8JE4+bDln
JE8lRiUtJTklSCRHST08KCQ1JGwkXiQ5ISMbKEI8L3NwYW4+

–hogehogehoge–


受信メールは以下になります。
メーラーが HTML に対応しているため、HTML 形式で表示されています。
画像

上記メールのソース (ヘッダ、ボディ) は以下のようになります。

Return-Path: “envelope from で指定した SMTP アドレス”

メールが経由した SMTP サーバーの情報

from: testuser@testdom.com
to: UserA@akbmacha.com
Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsJWEhPCVrJE43b0w+JEckOSEjGyhC?=
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=”hogehogehoge”
Date: Mon, 12 Mar 2018 16:09:46 +0900
Message-ID: <メッセージ ID>

–hogehogehoge
Content-Type: text/plain ; charset=”iso-2022-jp”
Content-Transfer-Encoding: base64

SFRNTCAbJEI3QTwwJE4lYSE8JWskRyQ5ISMbKEINCkhUTUwgGyRCJEtCUDF+JDck
RiQkJEokJCVhITwlaSE8JE4+bDlnJE8lRiUtJTklSCRHST08KCQ1JGwkXiQ5ISMb
KEI=

–hogehogehoge
Content-Type: text/html ; charset=”iso-2022-jp”
Content-Transfer-Encoding: base64

PHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPkhUTUwgGyRCN0E8MCROJWEhPCVrJEck
OSEjGyhCPGJyPkhUTUwgGyRCJEtCUDF+JDckRiQkJEokJCVhITwlaSE8JE4+bDln
JE8lRiUtJTklSCRHST08KCQ1JGwkXiQ5ISMbKEI8L3NwYW4+

–hogehogehoge–

MFCMAPI の使い方


MAPI に重要な概念としてプロパティというものがあります。
メッセージには件名や本文、フォルダにはフォルダ名や未読件数、受信者にはメール アドレスや表示名というように関連付けられるデータがあり、それらを MAPI ではプロパティと呼んでいます。
MFCMAPI ツールは Outlook と同様に MAPI クライアント アプリケーションであり、MAPI プロパティを自由に表示、編集、または削除できます。また Outlook では表示されない隠しアイテムを MFCMAPI で表示したり、削除することもできます。MAPI プロパティに問題がある場合に意図しない問題が発生することがあるため、MFCMAPI で不正になった MAPI プロパティを編集したり、隠しアイテムを削除したりして問題が解決することがあります。
注意事項としては、間違った操作を行うとメールボックスにアクセスできないなど深刻な問題に発展する場合があるため、基本的にはマイクロソフトの技術サポートからの案内に従って実施します。

  1. 展開したフォルダー内の mfcmapi.exe を実行します。
  2. ダイアログが表示されたら [OK] をクリックします。
    (次回以降表示させないようにするには [Display at startup] をオフにします)
  3. メニュー バーの [Tools]-[Options] をクリックし、[Use the MDB_ONLINE_ flag when calling OpenMsgSore] をオンにしてから [OK] をクリックします。
  4. メニュー バーの [Session]-[Logon] で [プロファイルの選択] 画面を表示し、該当するプロファイルを選択し [OK] をクリックします。
  5. メールボックスを選択し、ダブルクリックします。
  6. 表示される画面左側のツリーから [Root Container] をクリックするとメールボックス内にある全てのフォルダーが表示できます。
    Outlook ではアクセスできないフォルダーも全て表示されるのでたくさんのフォルダーが出てきますが、受信トレイなど Outlook で表示される既定フォルダーは “インフォーメーション ストアの先頭” と呼ばれるフォルダーの配下を展開することで確認できます。
  7. 後は各フォルダーをダブル クリックすることでアイテムの MAPI プロパティを表示することができます。
情報MAPI プロパティ
差出人PR_SENDER_EMAIL_ADDRESS
受信者PR_RECEIVED_BY_EMAIL_ADDRESS
件名PR_SUBJECT
ボディPR_BODY

※ 調査中のため不正確な可能性があります。

MFCMAPI は以下よりダウンロード可能です。
Title: Continuous Integration (18.2.18068.37)
URL: https://github.com/stephenegriffin/mfcmapi/releases

Outlook のキャッシュモードとオンラインモード、[共有フォルダーをダウンロード] のメリット、デメリット


Microsoft ではキャッシュモードを推奨しています。
ここではキャッシュモードとオンラインモードの動作の違いやメリット、デメリットを紹介します。

キャッシュモード

メリット

  • メール一覧を表示、メールを開く、メールを作成して送信するなどの作業を行う際に、ローカルの OST ファイルに対して操作が行われるため処理がはやい。
  • 一定の間隔でまとめてデータの同期が行われており、ネットワーク効率がよい。結果として、サーバーやネットワークへの負荷を低く抑えることができる。
  • ネットワークの遅延や切断などの問題が発生した際は自動的にオフラインに切り替わり、ローカルのキャッシュを使用して操作し続けることができる。

デメリット

  • ローカルにキャッシュするためのディスク領域が必要。
  • セキュリティ上の理由によりローカルにメールなどのデータを残したくない場合は利用できない。
  • Outlook で変更を行うと、まずローカルのデータに対して処理が行われた後に、一定の同期タイミングによりまとめて変更が反映されるのでそれまでは更新されない (最大 60 秒)。
  • Exchange サーバーのメールボックス上で変更が行われると、一定の同期タイミングによりまとめて変更が反映されるのでそれまでは更新されない (最大 60 秒)。
  • 負荷分散が構成されている仮想環境を利用する場合のように OST ファイルの再作成が頻繁に発生するような状況では、キャッシュ モードでは利用できない。

オンラインモード

メリット

  • ローカルにデータがダウンロードされない。
    (セキュリティ上の理由によりローカルにメールなどのデータを残したくない場合はオンライン モードで利用する必要がある)。
  • ローカルにキャッシュするためのディスク領域が不要。
  • 常に最新のデータを表示したり更新したりすることができる。
  • 負荷分散が構成されている仮想環境を利用する場合のように OST ファイルの再作成が頻繁に発生するような状況ではキャッシュ モードでは利用できないため、オンラインモードで利用する必要がある。

デメリット

  • 一般的にはキャッシュモードに比べて操作が遅くなる。
    (毎回、Exchange サーバーのメールボックスにアクセスしてデータを取得するため。2 回目以降はメモリ上に読み込まれているデータが残っている場合はメモリから読み込むため高速に処理されるが、メモリ解放後は再度 Exchange サーバーにアクセスしてデータを取得する動作となる)
  • 頻繁に Exchange サーバーからデータを取得する必要があるため、ネットワークや Exchange サーバーに負荷がかかる。
  • 検索を行うと Exchange サーバー側で検索を行うため、Exchange サーバーに負荷がかかる。
  • ネットワークに接続していない場合は、データを参照できない。

キャッシュモードの [共有フォルダーをダウンロード] をオン

メリット

他のユーザーの予定表などの共有フォルダーのデータをローカルにキャッシュし、ローカルにキャッシュされたデータの表示や更新を行うため、一般的にはユーザーの操作が速くなる。

デメリット

  • 他のユーザーの予定表などのデータをキャッシュするためのディスク容量が必要。
  • 予定表に他のユーザーの予定表が多数登録されていると、以下のような問題が発生する場合がある。
    * Outlook は起動時に予定表に登録されている全ユーザー (ユーザー名の左側のチェックがオンオフどちらでも。ただし同期が完了したことがあるユーザーのみ) の予定表を同期し、ユーザーごとのセッションを維持し続けて変更があると同期が行われる。
    その影響によって Outlook の起動に時間がかかったり Outlook の全体的なパフォーマンスが悪くなったりする場合がある。
    * 他のユーザーの共有フォルダーをキャッシュするため OST ファイルのサイズが大きくなり、OST ファイルのサイズに比例してパフォーマンスが悪化する。

キャッシュモードの [共有フォルダーをダウンロード] をオフ

メリット

  • 他のユーザーの共有フォルダーに対して操作を行う際、最新のデータの表示と更新ができる。
    (直接ネットワーク上の他のユーザーのメールボックスからクライアントのメモリにデータを読み込む動作となるため、同期タイミングの影響を受けない)
  • 自分のメールボックスはキャッシュし、他のユーザーの予定表などのフォルダーはキャッシュしないことになるため、OST ファイルのサイズを抑えることができる (他のユーザーの共有フォルダーをキャッシュするためのディスク容量が不要)。
  • 予定表に他のユーザーの予定表が多数登録されていて、[共有フォルダーをダウンロード] がオンで以下のような問題が発生している場合は、[共有フォルダーをダウンロード] をオフにするとパフォーマンスが改善する。
    * Outlook は起動時に予定表に登録されている全ユーザー (ユーザー名の左側のチェックがオンオフどちらでも。ただし同期が完了したことがあるユーザーのみ) の予定表を同期し、 ユーザーごとのセッションを維持し続けて変更があると同期が行われる。
    その影響によって Outlook の起動に時間がかかったり Outlook の全体的なパフォーマンスが悪くなったりする場合がある。
    * 他のユーザーの共有フォルダーをキャッシュするため OST ファイルのサイズが大きくなり、OST ファイルのサイズに比例してパフォーマンスが悪化する。

デメリット

予定表に多数のユーザーが登録されていない場合は、[共有フォルダーをダウンロード] がオンの場合に比べてユーザーの操作が遅くなる。
ネットワークに接続していない場合は、他のユーザーのデータを参照できない。

Outlook on the web にてメールアイテムを eml 形式で保存し、ソースを確認する方法


msg 形式のメールを eml 形式に変換し、メッセージのソースを確認する方法です。

  1. Outlook で該当の msg ファイルを受信トレイなどにコピーします。
  2. Outlook on the web にサインインします。
  3. [新規作成] をクリックし、メールの新規作成画面を別ウィンドウとして表示します。
    ※ メール作成画面が同一ウィンドウ内になっている場合は、新規作成画面の右上にある画面が 2 つ 重なったようなアイコンをクリックします。
  4. 項番 1 にてコピーした (Outlook on the web 上の) メールアイテムを、メール新規作成画面の本文欄へドラッグします。
    ※ ドラッグされたアイテムが添付ファイルの扱いとなり、本文の上部に表示されます。
  5. 自分宛にメールを送信します。
  6. 項番 5 にて送信したメールを受信後、添付されているメール アイテムを右クリックし、[ダウンロード] をクリックします。
  7. 画面下に[ <ファイル名> を保存しますか?] というバーが表示されるので、[保存] の右隣の下向きの矢印をクリックし、[名前を付けて保存] をクリックします。
  8. 保存先を指定した上で、[ファイルの種類] にて、[すべてのファイル] を選択し、[ファイル名] に、<ファイル名>.eml と拡張子を記載した上で、[保存] をクリックします。
  9. 保存した eml ファイルを右クリックし、[プログラムから開く] – [メモ帳] で開きます。

コマンドで代理人を再設定する方法

代理人設定を解除する

User1 の予定表アクセス権から User2 を削除します。
Remove-MailboxFolderPermission User1:\予定表 -User User2

GrantSendOnBehalfTo プロパティからも代理人設定が消えた事を確認します。
Get-Mailbox -Identity User1 |select GrantSendOnBehalfTo

GrantSendOnBehalfTo
——————-
{}

この作業により Outlook 側でも代理人設定が削除されます。
「予定表」のアクセス権 (既定は「編集者」) だけでなく、「受信トレイ」のアクセス権 (既定は「なし」) からも代理人が削除されます。

代理人を再設定する

User1 の予定表アクセス権に User2 を設定します。
-SharingPermissionFlags Delegate オプションを指定する事で代理人が有効になります。


Add-MailboxFolderPermission User1:\予定表 -User User2 -AccessRights editor -SharingPermissionFlags Delegate

User1 の予定表アクセス権に User2 が設定され、アクセス権が editor、SharingPermissionFlags プロパティが Delegate になっている事を確認します。


Get-MailboxFolderPermission -Identity User1:\予定表


画像

GrantSendOnBehalfTo プロパティに User2 が代理人として設定された事を確認します。


Get-Mailbox -Identity User1 |select GrantSendOnBehalfTo

GrantSendOnBehalfTo
——————-
{User2}

この作業により Outlook 側でも User2 が代理人として設定されます。

Azure Active Directory ユーザー アカウント、メールボックスの削除/復元シナリオ

Remove-MsolUser コマンドを使用してユーザー アカウントを削除 (訴訟ホールドなし)

  • ユーザー アカウントはゴミ箱に移動する (Azure Active Directory のごみ箱に 30 日間保存)。
  • ユーザーのメールボックスは SoftDeleted のステータスになる。

サンプル (削除と復元)

UserA のユーザー アカウントを削除します。
Remove-MsolUser -UserPrincipalName UserA の UPN

UserA が存在する事を確認します。
Get-Mailbox -SoftDeletedMailbox

UserA のユーザー アカウントを復元します。
(30 日以内。メールボックスも同時に復元されます。)
Restore-MsolUser -UserPrincipalName UserA の UPN

Remove-MsolUser コマンドを使用してユーザー アカウントを削除 (訴訟ホールドあり)

  • ユーザー アカウントはゴミ箱に移動する (Azure Active Directory のごみ箱に 30 日間保存)。
  • ユーザーのメールボックスは SoftDeleted のステータスになる。
  • ユーザーのメールボックスは非アクティブなメールボックス※となり、30 日を過ぎても訴訟ホールドが有効な期間中データーは保持される。

※セキュリティ/コンプライアンスセンターのコンテンツ検索を行う場合、検索対象のメールボックスは (Inactive Mailbox) と表示されるため、検索は可能です。

サンプル (削除と復元)

UserB のユーザー アカウントを削除します。
Remove-MsolUser -UserPrincipalName UserB の UPN

UserB が存在する事を確認します。
Get-Mailbox -SoftDeletedMailbox

UserB が存在する事を確認します。
Get-Mailbox -InactiveMailboxOnly

UserB のユーザー アカウントを復元します。
(30 日以内。メールボックスも同時に復元されます。)
Restore-MsolUser -UserPrincipalName UserB の UPN

再度、UserB のユーザー アカウントを削除します (ゴミ箱からも削除)。
Remove-MsolUser -UserPrincipalName “UserB の UPN” -RemoveFromRecycleBin

Remove-Mailbox コマンドを使用してメールボックスのみを削除 (訴訟ホールドなし)

  • ユーザー アカウントはゴミ箱に移動する (Azure Active Directory のごみ箱に 30 日間保存)。
  • ユーザーのメールボックスは SoftDeleted のステータスになる。

サンプル (削除と復元)

UserA のメールボックスを削除します。
Remove-Mailbox -Identity UserA

UserA のメールボックスを元のユーザー アカウントに対し、復元します。
Undo-SoftDeletedMailbox -SoftDeletedObject UserA

ユーザーが接続している Outlook バージョンおよびビルド番号を調べる

以下の手順に従って、メールボックスごとに所有者のアクセス監査を有効にし、メールボックスのログオンに使用した Outlook バージョンに関する監査ログを確認します。


以下のコマンドを実行し、監査ログを有効にします。
Set-Mailbox -Identity User1 -AuditOwner MailboxLogin -AuditEnabled $true

以下のコマンドを実行し、監査ログを検索します。
Search-MailboxAuditLog -Identity User1 -LogonTypes owner -ShowDetails | ? { $_.ClientInfoString -like “*Outlook*” }

コメント

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