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.