Exchange无法自动转码电子邮件。
幸运的是,使用传输代理,您可以编写地狱的脚本。不幸的是,你将不得不自己编写逻辑。我们来看看吧。
您基本上可以按照http://msdn.microsoft.com/en-us/library/office/aa579185%28v=exchg.140%29.aspx上的说明进行操作。
在您的流程图中:
- 你已经覆盖了这个(对吧?)
- 打破。我们永远不会这样做。编写一个运输代理,改变我们需要改变的一切。OnEndOfData事件接受一个委托,该委托作为参数包含一个包含
MailItem
您需要的所有内容的委托。首先检查是否MailItem.Message.To
包含您的MailBox-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流的内容不变地写入新部分的内容流中(因为您表示不会使用7bit ASCII以外的任何字符,内容实际上是相同的。如果不是,请将流读取为7位ascii,base64将生成的字符串解码为字节流,将UTF-8编码的bystream解码为字符串,替换需要替换的内容,用7位ASCII编码写入字节流,base64编码生成的字节流,写入结果用7bit ASCII编码到目标流的字符串)(p!)。
用新的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的范围内。