C# 内部收件人的Exchange 2010/2013 TransportAgent内容转换

C# 内部收件人的Exchange 2010/2013 TransportAgent内容转换,c#,exchange-server,exchange-server-2010,exchange-transport-agents,tnef,C#,Exchange Server,Exchange Server 2010,Exchange Transport Agents,Tnef,我正在尝试创建一个TransportAgent,将内部电子邮件重新路由到远程服务器进行进一步处理,但该电子邮件以Microsoft的内部TNEF格式发送(未应用任何内容转换)。我希望它是在相同的格式,将使用如果电子邮件是要向外部收件人 我目前正在使用RoutingAgent将内部电子邮件重新路由到远程服务器。如果有人能用分类程序的管道来解释为什么会发生这种情况,那也会很有帮助,即使我无法避免。如果答案因Exchange版本不同而不同,则此代理将在Exchange 2010和2013中实施。示例使

我正在尝试创建一个
TransportAgent
,将内部电子邮件重新路由到远程服务器进行进一步处理,但该电子邮件以Microsoft的内部TNEF格式发送(未应用任何内容转换)。我希望它是在相同的格式,将使用如果电子邮件是要向外部收件人


我目前正在使用
RoutingAgent
将内部电子邮件重新路由到远程服务器。如果有人能用分类程序的管道来解释为什么会发生这种情况,那也会很有帮助,即使我无法避免。如果答案因Exchange版本不同而不同,则此代理将在Exchange 2010和2013中实施。

示例使用reflection ItemConversion.convertanymimemetomemethod方法

var mimeDocument = new MimeDocument();
using (var mimeDocumentLoadStream = mimeDocument.GetLoadStream())
{
    ConvertAnyMimeToMimeMethod(email.Message.MimeDocument, mimeDocumentLoadStream);
}
var convertedEmail = EmailMessage.Create(mimeDocument);


private static void ConvertAnyMimeToMimeMethod(MimeDocument documentIn, Stream mimeOut)
{
    var assembly = Assembly.Load("Microsoft.Exchange.Data.Storage");
    var outboundConversionOptionsType = assembly?.GetType("Microsoft.Exchange.Data.Storage.OutboundConversionOptions");
    var outboundOptionsConstructor = outboundConversionOptionsType?.GetConstructor(
        BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public,
        null,
        new[] { typeof(string) },
        null);
    var outboundOptions = outboundOptionsConstructor?.Invoke(new object[] { "OurDomain.tld" });
    var itemConversionType = assembly?.GetType("Microsoft.Exchange.Data.Storage.ItemConversion");
    var convertAnyMimeToMimeMethod = itemConversionType?.GetMethod(
        "ConvertAnyMimeToMime",
        BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static,
        null,
        new[] { documentIn.GetType(), mimeOut.GetType(), outboundOptions?.GetType() },
        null);

    convertAnyMimeToMimeMethod.Invoke(null, new[] { documentIn, mimeOut, outboundOptions });
}