Exchange server 如何正确设置exchange地址类型的发件人信息

Exchange server 如何正确设置exchange地址类型的发件人信息,exchange-server,outlook-redemption,sender,msg,Exchange Server,Outlook Redemption,Sender,Msg,在某些msg文件中,发件人信息被意外删除。我想在msg文件中恢复发件人信息。我正在使用赎回库恢复信息 信息正在正确还原。我已经使用MFCMAPI工具验证了信息 但当我用outlook打开fixed msg时,发送者的exchange规范名称将与发送者的显示名称一起显示在UI中。e、 g“John”在good msg中只显示“John”。 我正在使用以下代码还原发件人信息 var PR_SENDER_ADDRTYPE_W = 0x0C1E001F; var PR_

在某些msg文件中,发件人信息被意外删除。我想在msg文件中恢复发件人信息。我正在使用赎回库恢复信息

信息正在正确还原。我已经使用MFCMAPI工具验证了信息

但当我用outlook打开fixed msg时,发送者的exchange规范名称将与发送者的显示名称一起显示在UI中。e、 g“John”在good msg中只显示“John”。

我正在使用以下代码还原发件人信息

        var PR_SENDER_ADDRTYPE_W = 0x0C1E001F;
        var PR_SENDER_NAME_W = 0x0C1A001F;
        var PR_SENDER_EMAIL_ADDRESS_W = 0x0C1F001F;
        var PR_SENDER_SMTP_ADDRESS = 0x5D01001F;


        Redemption.RDOSession oRdoSession = null;
        RDOMail oRdoMail = null;
        SafeMailItem sfItem = null;
        

           oRdoSession = Redemption.RedemptionLoader.new_RDOSession(); // session = New Redemption.RDOSession
            oRdoMail = oRdoSession.GetMessageFromMsgFile(sFilePath);

            sfItem = Redemption.RedemptionLoader.new_SafeMailItem(); // CreateObject("redemption.safemailitem")
            sfItem.Item = oRdoMail;
            bool f_Changed = false;
            var f_EntryID = oRdoSession.CreateOneOffEntryID(p_FromDisplayName, p_FromAddressType, p_FromEmailAddress, Type.Missing, Type.Missing);

            var ID = oRdoSession.GetAddressEntryFromID(f_EntryID);
            oRdoMail.Sender = ID;
            oRdoMail.SentOnBehalfOf = ID;

            //SetFieldValue is nothing but  sfItem.Fields[PR_SENDER_ADDRTYPE_W] = p_FromAddressType 
            SetFieldValue(sfItem, PR_SENDER_ADDRTYPE_W, "PR_SENDER_ADDRTYPE_W", p_FromAddressType, ref f_Changed);
            SetFieldValue(sfItem, PR_SENDER_NAME_W, "PR_SENDER_NAME_W", p_FromDisplayName, ref f_Changed);
            SetFieldValue(sfItem, PR_SENDER_SMTP_ADDRESS, "PR_SENDER_SMTP_ADDRESS", p_FromSmtpAddress, ref f_Changed);
            SetFieldValue(sfItem, PR_SENDER_EMAIL_ADDRESS_W, "PR_SENDER_EMAIL_ADDRESS_W", p_FromEmailAddress, ref f_Changed);

            oRdoMail.Save();
你能告诉我我错过了什么吗


有关已发送信息的mor属性,请查看屏幕截图。

Outlook实际显示代表xyz属性的
PR\u sent\u

绝对没有理由创建
SafeMailItem
的实例-只需使用
RDOSession.GetMessageFromMsgFile
返回的
RDOMail
对象即可

p\u FromAddressType
p\u FromEmailAddress
变量的值是什么?如果您知道SMTP地址,只需将其传递到
CreateOneOffEntryID

var f_EntryID = oRdoSession.CreateOneOffEntryID(p_FromDisplayName, "SMTP", p_FromSmtpAddress, Type.Missing, Type.Missing);

PR_SENT_代表_xyz属性也被正确设置为原始电子邮件中的内容,我附上有问题的图片。我将EX作为AddressType和/O=Exchange/OU=ExchangeAdmin传递。。。。作为p_FromEmailAddress。我想保留发件人信息中的规范名称,就像它在原始电子邮件中一样。我有smtp信息,在设置Ex-type发件人地址后,我正在设置SMPT address属性。感谢Dmitry提供您的建议。但这个解决方案对我不起作用。是否有任何方法可以发送我试图修复的msg文件和原始文件,以便您可以获得与问题相关的所有信息。在调用CreateOneOfEntryId时,不要将地址类型设为“EX”。它必须是“SMTP”,并且地址必须是SMTP地址,而不是EX。我如何保留legacyExchangeDn地址(/O=Exchange/OU=ExchangeAdmin…)在电子邮件属性中?如果您将代表条目id的sender/sent设置为从相应的GAL对象检索到的条目id,而不是使用CreateOneOffEntryID(实际上用于SMTP、传真、MSN地址),则可以保留该条目id