Поделиться через


Подготовка 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-заголовок для многих пользователей, отправив пакетное сообщение электронной почты списку получателей в организации вызывающего абонента.

См. также