Re-codifica e-mails e encaminha automaticamente para uma caixa postal específica

0

Estou trabalhando em um ambiente do Exchange 2010 e estou interessado em fazer o seguinte:

  • Ter uma regra do lado do servidor que recebe todos os e-mails enviados para um determinado endereço e encaminhá-los para um novo endereço.
  • No entanto, antes de o email ser encaminhado, ele precisa ser recodificado com um conjunto de caracteres específico. No meu caso, o e-mail está sendo recebido na codificação UTF-8 , e eu preciso que ele seja recodificado como US-ASCII e, em seguida, encaminhado.

Então, o "fluxograma" seria:

  1. E-mail UTF-8 enviado para a caixa postal A
  2. A Mailbox-A recebe e-mail UTF-8.
  3. A regra do lado do servidor na Caixa de Correio-A recodifica o conjunto de caracteres no email para US-ASCII
  4. Recentemente, o email codificado em US-ASCII é encaminhado para o Mailbox-B

Eu me deparei com várias soluções possíveis: regra de caixa de correio, regras de transporte, contas de diário ... mas nenhuma parece resolver imediatamente o meu problema. Pode ser que eu não esteja investigando o suficiente.

Qualquer ajuda sobre isso seria muito apreciada. Obrigado!

    
por romellem 25.08.2014 / 22:58

1 resposta

0

O Exchange não pode transcodificar automaticamente uma mensagem de e-mail.

Felizmente, com os agentes de transporte, você pode roteirizar o inferno fora da troca. Infelizmente, você terá que escrever a lógica você mesmo. Vamos passar por isso.

Você basicamente pode seguir as instruções no link

No seu fluxograma:

  1. Você já tem isso coberto (certo?)
  2. BREAK. Nós nunca vamos fazer isso. Escreva um agente de transporte que mude tudo o que precisamos mudar. No evento OnEndOfData tem um delegado que tem como um argumento que contém um MailItem que tem tudo o que você precisa. Primeiro verifique se MailItem.Message.To contém sua MailBox-A. Em caso afirmativo, altere tudo o que você precisa alterar:
    • MailItem.Message.To add Maibox-B (opcionalmente remova MailBox-A)
    • Obtenha o corpo antigo mimepart com MailItem.Message.Body.MimePart . Crie um novo MimePart com o construtor

-

public MimePart(
  string contentType,
  ContentTransferEncoding transferEncoding,
  Stream contentStream,
  CachingMode cachingMode
)

Você precisará do contentType "text/plain" , ContentTransferEncoding do antigo ContentTransferEncoding , um novo fluxo de conteúdo e CachingMode CachingMode.Copy

Escreva o conteúdo do fluxo do antigo MimePart inalterado no fluxo de conteúdo da nova parte (desde que você indicou que não usará nenhum caractere fora do ASCII de 7 bits, o conteúdo é realmente idêntico. Se não for, leia o fluxo como 7bit ascii, base64 decodifica a string resultante para um byte stream, decodifica o bystream com codificação UTF-8 para uma string, substitui o que você precisa substituir, grava para um bytestream com codificação ASCII de 7 bits, codifica a base64 pelo bytestream resultante, escreva a string resultante na codificação do fluxo de destino com ASCII de 7 bits) (phew!).

Substitua o antigo MimePart pelo novo MimePart. Você pode usar old.Parent.ReplaceChild(old, new) .

Compile a coisa e anexe a dll com o agente compilado ao Exchange. Copie e cole da documentação: Execute Install-TransportAgent -Name "MyCustomAgent" -TransportAgentFactory "MyAgents.MyAgentFactory" -AssemblyPath "C:\myagents\MyAgent.dll" no Shell de Gerenciamento do Exchange.

O e-mail ajustado agora estará em ASCII de 7 bits e terá o destinatário correto.

É possível? Sim. Tudo isso vale a pena? Provavelmente não. Que clientes bobo de e-mail não conseguem ler o UTF-8? Eu pessoalmente não saberia de nenhum, e o custo de apoiá-los provavelmente é muito maior do que apenas atualizar os clientes de e-mail.

Se você vai tentar isto (eu não sugiro que você faça) e se perder com a parte de codificação, essas questões estariam no escopo do StackOverflow.

    
por 26.08.2014 / 13:28