Подготовка x-заголовков с помощью EWS в Exchange
Узнайте, как подготовить x-заголовки для почтового ящика с помощью управляемого API EWS или EWS в Exchange.
X-заголовки — это нестандартные заголовки, которые добавляются в коллекцию заголовков сообщения электронной почты для передачи информации. Например, Exchange маркирует сообщения с заголовком X-MS-Exchange-Organization-SCL , чтобы указать уровень достоверности спама (SCL), приписываемый сообщению электронной почты. Email клиентов, таких как Outlook, могут использовать эти сведения для определения типа действий, которые следует выполнить с электронной почтой (например, Outlook может запретить отображение изображений, если пользователь не примет какое-либо действие).
Exchange добавляет входящие X-заголовки в схему почтового ящика в качестве именованного свойства при первом получении сообщения электронной почты с этим x-заголовком. Значение x-заголовка не сохраняется в этом первом сообщении электронной почты; однако он сохраняется во всех последующих сообщениях электронной почты, включающих x-заголовок. По этой причине приложение должно подготавливать X-заголовки, прежде чем вы планируете их использовать. Сопоставление именованного свойства и x-заголовка происходит при доставке сообщения электронной почты в почтовый ящик. Это означает, что вам нужно получить сообщение электронной почты посредством доставки транспорта; Вы не можете просто сохранить сообщение электронной почты, содержащее x-заголовок, в почтовый ящик, чтобы создать сопоставление с именованным свойством.
Примечание.
Если вы обнаружите, что X-заголовки не сохраняются, определите, выполняет ли агент транспорта или брандмауэр заголовков фильтрацию X-заголовков, прежде чем они попадают в почтовый ящик. r
Подготовка x-заголовка с помощью управляемого API EWS
В следующем примере кода показано, как использовать метод EmailMessage.Send управляемого API EWS для подготовки x-заголовка для почтового ящика. В этом примере предполагается, что служба является допустимым объектом 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);
}
}
Подготовка x-заголовка с помощью EWS
В следующем примере кода показано, как использовать операцию EWS CreateItem для создания и отправки сообщения электронной почты для подготовки почтового ящика с X-заголовком. Это XML-запрос, который отправляется управляемым API EWS при подготовке x-заголовка с помощью управляемого API EWS.
<?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>
Различия версий
При первой подготовке x-заголовка в Exchange Online, Exchange Online в составе Office 365 или локальной версии Exchange, начиная с Exchange Server 2010 г., значение нового пользовательского X-заголовка не будет записано в сохраненное сообщение. Это связано с тем, что x-заголовок должен сначала быть сопоставлен с именованным свойством в почтовом ящике пользователя. Сопоставление происходит при первом запросе на добавление именованных свойств. При последующем запросе на создание именованного свойства свойство и значение сохраняются в сообщении. В Exchange 2007 при записи x-заголовка в базу данных почтовых ящиков создается сопоставление x-заголовка с именованным свойством в базе данных почтовых ящиков. При последующем запросе на создание именованного свойства x-заголовок обрабатывается и сохраняется для любого почтового ящика в базе данных Exchange 2007.
Дальнейшие действия
В этой статье показано, как подготовить X-заголовок для одного почтового ящика, отправив пользователю сообщение электронной почты. Вы также можете подготовить X-заголовок для многих пользователей, отправив пакетное сообщение электронной почты списку получателей в организации вызывающего абонента.