Exchange で EWS を使用して X ヘッダーを準備する
Exchange で EWS マネージ API または EWS を使用して、メールボックスの X ヘッダーを準備する方法について説明します。
X ヘッダーは、情報を伝達するために電子メールのヘッダー コレクションに追加される非標準のヘッダーです。 たとえば、Exchange は X-MS-Exchange-Organization-SCL ヘッダーでメッセージにスタンプを設定し、電子メールに設定された spam confidence level (SCL) 属性を示します。 Outlook などの電子メール クライアントは、この情報を使用して、電子メールで実行するアクションの種類を判別します (たとえば、Outlook ではユーザーがアクションを実行しない限りイメージを表示しないようにできます)。
Exchange は、その x ヘッダーを含む電子メールを初めて受信すると、メールボックス スキーマに名前付きプロパティとして受信 x ヘッダーを追加します。 x ヘッダー値は、その最初のメールには保存されません。ただし、x ヘッダーを含むすべての後続のメールに保存されます。 このため、アプリケーションでは x ヘッダーを使用する前にプロビジョニングする必要があります。 名前付きプロパティと x ヘッダーの間のマッピングは、メールをメールボックスに転送する際に発生します。 つまり、トランスポート配信を介して電子メールを受信する必要があります。名前付きプロパティへのマッピングを作成するために、メールボックスに x ヘッダーを含む電子メールを保存することはできません。
注:
X ヘッダーが保存されていないことが確認された場合、トランスポート エージェントまたはヘッダー ファイアウォールによって、X ヘッダーがメールボックスに到着する前にフィルタリング処理されているかどうかを判別します。 r
EWS マネージ API を使用して X ヘッダーを準備する
次のコード例は、EWS マネージ API EmailMessage.Send メソッドを使用して、メールボックスの X ヘッダーを準備する方法を示しています。 この例では、service は有効な ExchangeService オブジェクトであり、対象のメールボックスは名前付きプロパティのクォータを超過していないことを前提としています。
private static void ProvisionCustomXHeaderByEmail(ExchangeService service)
{
// Create a definition for an extended property that will represent a custom x-header. X-headers must be created in the
// InternetHeaders property set. The x-header name must match the name of the x-header sent in the subsequent emails so
// the x-header and value are saved on the email.
ExtendedPropertyDefinition xExperimentalHeader = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders,
"X-Experimental",
MapiPropertyType.String);
// Create an item that is used to provision the custom x-header.
EmailMessage email = new EmailMessage(service);
email.ToRecipients.Add("user@contoso.com");
email.SetExtendedProperty(xExperimentalHeader, "Provision X-Experimental Internet message header");
try
{
// The mapping of the named property happens in transport delivery.
email.Send();
if (service.ServerInfo.MajorVersion == 12)
{
Console.WriteLine("Provisioned the X-Experimental across the mailbox database that hosts the user's mailbox.");
}
else // For versions of Exchange starting with Exchange 2010
{
Console.WriteLine("Provisioned the X-Experimental for the user's mailbox. You will need to run this " +
"for each mailbox that needs to process this x-header.");
}
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
}
EWS を使用して X ヘッダーを準備する
次のコード例は、EWS CreateItem 操作を行って、X ヘッダーが含まれるメールボックスを準備するために電子メールを作成し送信する方法を示しています。 これは、EWS マネージ API を使用して X ヘッダーを準備する場合に、EWS マネージ API が送信する XML 要求でもあります。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendOnly">
<m:Items>
<t:Message>
<t:ExtendedProperty>
<t:ExtendedFieldURI DistinguishedPropertySetId="InternetHeaders"
PropertyName="X-Experimental"
PropertyType="String" />
<t:Value>Provision X-Experimental Internet message header</t:Value>
</t:ExtendedProperty>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>user@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
バージョンの相違点
Exchange Onlineで x ヘッダーを初めてプロビジョニングするとき、Office 365の一部としてExchange Online、または Exchange Server 2010 以降のオンプレミス バージョンの Exchange では、新しいカスタム x ヘッダーの値は格納されたメッセージに書き込まれません。 これは、x ヘッダーを最初にユーザーのメールボックス内の名前付きプロパティにマップする必要があるためです。 マッピングは、名前付きプロパティを追加する最初の要求時に発生します。 名前付きプロパティを作成する後続の要求が発生すると、プロパティと値がメッセージに格納されます。 Exchange 2007 では、初めて x ヘッダーがメールボックス データベースに書き込まれると、メールボックス データベース全体の名前付きプロパティへの x ヘッダーのマッピングが作成されます。 名前付きプロパティを作成する後続の要求が発生すると、x ヘッダーが処理され、Exchange 2007 データベース内の任意のメールボックスに格納されます。
次の手順
この資料では、ユーザーに電子メールを送信して、1 つのメールボックスの 1 つの X ヘッダーを準備する方法を取り上げました。 多数のユーザーの X ヘッダーを準備することもできます。その場合には、呼び出し元の組織で受信者の一覧にバッチ電子メールを送信します。