Exchange не может автоматически перекодировать сообщение электронной почты.
К счастью, с транспортными агентами вы можете чертовски разменять сценарий. К сожалению, вам придется написать логику самостоятельно. Давайте пройдем через это.
Вы можете в основном следовать инструкциям на http://msdn.microsoft.com/en-us/library/office/aa579185%28v=exchg.140%29.aspx
В вашей блок-схеме:
- Вы уже покрыли это (правильно?)
- ПЕРЕРЫВ. Мы никогда этого не сделаем. Напишите транспортного агента, который меняет все, что нам нужно изменить. Событие OnEndOfData принимает делегата в качестве аргумента, который содержит
MailItem
который имеет все необходимое. Сначала проверьте, если MailItem.Message.To
содержит ваш почтовый ящик-A. Если это так, измените все, что вам нужно изменить:
MailItem.Message.To
добавить Maibox-B (опционально удалите MailBox-A)
- Получить старый mimepart тела с
MailItem.Message.Body.MimePart
. Создайте новый MimePart
с помощью конструктора
-
public MimePart(
string contentType,
ContentTransferEncoding transferEncoding,
Stream contentStream,
CachingMode cachingMode
)
Вы будете нуждаться в contentType
"text/plain"
ContentTransferEncoding
старого ContentTransferEncoding
нового потока контента, и CachingMode
CachingMode.Copy
Запишите содержимое потока старого MimePart в неизменном виде в поток содержимого новой части (поскольку вы указали, что в любом случае не будете использовать какие-либо символы за пределами 7-битного ASCII, содержимое фактически идентично. Если это не так, считайте поток как 7-битный ascii, base64 декодирует полученную строку в байтовый поток, декодирует поток с кодировкой UTF-8 в строку, замените то, что вам нужно заменить, запишите в поток байтов 7-битную кодировку ASCII, base64 кодировать результирующий поток, записать полученную строку в кодировку целевого потока с 7-битным ASCII) (фу!).
Замените старый MimePart новым MimePart. Вы можете использовать old.Parent.ReplaceChild(old, new)
.
Скомпилируйте вещь и подключите dll с скомпилированным агентом к Exchange. Скопируйте и вставьте из документации: Выполните Install-TransportAgent -Name "MyCustomAgent" -TransportAgentFactory "MyAgents.MyAgentFactory" -AssemblyPath "C:\myagents\MyAgent.dll"
в командной консоли Exchange.
Скорректированное письмо теперь будет в 7-битном ASCII и получит правильного получателя.
Является ли это возможным? Да. Это все стоит того? Возможно нет. Какие глупые почтовые клиенты не могут читать UTF-8? Лично я не знал бы ни о чем, и стоимость поддержки их, вероятно, намного выше, чем просто обновление почтовых клиентов.
Если вы попытаетесь это сделать (я не рекомендую вам это делать) и потеряетесь в части кодирования, эти вопросы будут в рамках StackOverflow.