重新编码电子邮件并自动转发到特定邮箱


0

我在Exchange 2010环境中工作,我有兴趣执行以下操作:

  • 拥有服务器端规则,将所有电子邮件发送到特定地址,并将其转发到新地址。
  • 但是,在转发电子邮件之前,需要使用特定的字符集重新编码。就我而言,电子邮件是以UTF-8编码接收的,我需要将其重新编码为US-ASCII,然后转发。

所以“流程图”将是:

  1. UTF-8发送到Mailbox-A的电子邮件
  2. Mailbox-A收到UTF-8电子邮件。
  3. Mailbox-A上的服务器端规则将电子邮件上的字符集重新编码为US-ASCII
  4. 新的US-ASCII编码电子邮件转发到Mailbox-B

我遇到了几种可能的解决方案:邮箱规则,传输规则,日记帐帐户......但似乎没有立即解决我的问题。可能是我没有对此进行足够的调查。

任何有关这方面的帮助将不胜感激。谢谢!


附注:您不能将UTF-8编码为US-ASCII,因为UTF-8可以编码所有unicode而US-ASCII不能编码。您需要处理丢失的字符。
Martijn 2014年

这应该不是问题,因为我实际上正在生成(好吧,那种)UTF-8电子邮件。基本上,生成电子邮件的程序可以编码许多不同字符集中的字符,但US-ASCII不是其中之一。由于我正在创建电子邮件的正文,我知道电子邮件中不会有任何非US-ASCII字符。
罗马城

1
在这种情况下,您不必执行任何操作,因为US-ASCII可以编码的Unicode子集以UTF-8和US-ASCII编码相同。
user2313067 2014年

这并非严格意义上的。UTF-8中的电子邮件将content-transfer-encoding在其MIME中具有Base64和US-ASCII电子邮件,通常为7位(或省略,因为这是默认值)。无论如何,Content-type都会有所不同,需要改变。
Martijn 2014年

Answers:


0

Exchange无法自动转码电子邮件。

幸运的是,使用传输代理,您可以编写地狱的脚本。不幸的是,你将不得不自己编写逻辑。我们来看看吧。

您基本上可以按照http://msdn.microsoft.com/en-us/library/office/aa579185%28v=exchg.140%29.aspx上的说明进行操作。

在您的流程图中:

  1. 你已经覆盖了这个(对吧?)
  2. 打破。我们永远不会这样做。编写一个运输代理,改变我们需要改变的一切。OnEndOfData事件接受一个委托,该委托作为参数包含一个包含MailItem您需要的所有内容的委托。首先检查是否MailItem.Message.To包含您的MailBox-A。如果是,请更改您需要更改的所有内容:
    • MailItem.Message.To 添加Maibox-B(可选择删除MailBox-A)
    • 得到旧身体mimepart MailItem.Message.Body.MimePartMimePart使用构造函数创建一个新的

-

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的范围内。


感谢您的详细回复!它实际上与票务系统有关。我们正在使用的票务系统可以从电子邮件生成票证,但它会在UTF-8电子邮件上窒息。它只适用于US-ASCII和ISO-8859-1(至少这是我们在测试中看到的)。我知道,整件事情很荒谬,但我至少要回到管理层并给出我们的选择。:)
romellem 2014年

重新设计票务系统的客户(如果它是一个内部项目)采取UTF-8而不是ASCII可能比这更少的工作,如果它不是那么,呃,上帝速度;)
Martijn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.