Compartilhar via


Provisionar cabeçalhos x usando o EWS no Exchange

Saiba como provisionar cabeçalhos x para uma caixa de correio usando a API Gerenciada do EWS ou o EWS no Exchange.

Cabeçalhos X são cabeçalhos não padrão que são adicionados à coleção de cabeçalho de um email para comunicar informações. Por exemplo, o Exchange carimba mensagens com o cabeçalho X-MS-Exchange-Organization-SCL para indicar o nível de confiança de spam (SCL) atribuído ao email. Email clientes como o Outlook podem usar essas informações para determinar que tipo de ação tomar no email (por exemplo, o Outlook pode impedir que imagens sejam exibidas, a menos que o usuário tome uma ação).

O Exchange adiciona cabeçalhos x de entrada ao esquema da caixa de correio como uma propriedade nomeada na primeira vez que recebe um email com esse cabeçalho x. O valor do cabeçalho x não é salvo nesse primeiro email; no entanto, ele é salvo em todos os emails subsequentes que incluem o cabeçalho x. Por esse motivo, seu aplicativo deve provisionar cabeçalhos x antes de esperar usá-los. O mapeamento entre uma propriedade nomeada e um cabeçalho x ocorre na entrega de transporte do email para a caixa de correio. Isso significa que você precisa receber o email por meio da entrega de transporte; você não pode salvar apenas um email que inclui o cabeçalho x em uma caixa de correio para criar o mapeamento em uma propriedade nomeada.

Observação

Se você descobrir que os cabeçalhos x não estão sendo salvos, determine se um agente de transporte ou firewall de cabeçalho está filtrando seus cabeçalhos x antes de chegarem à caixa de correio. r

Provisionar um cabeçalho x usando a API Gerenciada do EWS

O exemplo de código a seguir mostra como usar o método EmailMessage.Send da API Gerenciada do EWS para provisionar um cabeçalho x para uma caixa de correio. Este exemplo pressupõe que o serviço seja um objeto ExchangeService válido e que a caixa de correio de destino não excedeu a cota para propriedades nomeadas.

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);
    }
}

Provisionar um cabeçalho x usando o EWS

O exemplo de código a seguir mostra como usar a operação EWS CreateItem para criar e enviar um email para provisionar uma caixa de correio com um cabeçalho x. Essa é a solicitação XML enviada pela API Gerenciada do EWS quando você Provisiona um cabeçalho x usando a API Gerenciada do 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>

Diferenças de versão

Na primeira vez que você provisionar um cabeçalho x em Exchange Online, Exchange Online como parte de Office 365 ou uma versão local do Exchange começando com Exchange Server 2010, o valor de um novo cabeçalho X personalizado não será gravado na mensagem armazenada. Isso ocorre porque o cabeçalho x deve primeiro ser mapeado para uma propriedade nomeada na caixa de correio do usuário. O mapeamento ocorre após a primeira solicitação para adicionar as propriedades nomeadas. Quando ocorre uma solicitação subsequente para criar a propriedade nomeada, a propriedade e o valor são armazenados na mensagem. No Exchange 2007, a primeira vez que um cabeçalho x é gravado em um banco de dados de caixa de correio, um mapeamento é criado para o cabeçalho x para uma propriedade nomeada no banco de dados da caixa de correio. Quando ocorre uma solicitação subsequente para criar a propriedade nomeada, o cabeçalho x é processado e armazenado para qualquer caixa de correio no banco de dados do Exchange 2007.

Próximas etapas

Este artigo mostra como provisionar um cabeçalho x para uma única caixa de correio enviando um email para um usuário. Você também pode provisionar um cabeçalho x para muitos usuários enviando um email em lote para uma lista de destinatários na organização do chamador.

Confira também