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:
- Você já tem isso coberto (certo?)
- 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 seMailItem.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 novoMimePart
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.