从MS Outlook邮件中读取发件人的电子邮件地址

5

我正在使用以下代码从MS Outlook 2010读取电子邮件 -

public static void outLookApp_NewMailEx(string EntryIDCollection)
{                
    NameSpace _nameSpace;
    ApplicationClass _app;
    _app = new ApplicationClass();
    _nameSpace = _app.GetNamespace("MAPI");
    object o = _nameSpace.GetItemFromID(EntryIDCollection);
    MailItem Item = (MailItem)o;
    string HTMLbpdyTest = Item.HTMLBody;
    string CreationTime = Convert.ToString(Item.CreationTime);
    string strEmailSenderEmailId = Convert.ToString(Item.SenderEmailAddress);
    string strEmailSenderName = Item.SenderName;
    string Subject = Item.Subject;
} 

如何获取发件人的邮件ID。我尝试使用Item.SenderEmailAddress,但它没有给出发件人的电子邮件ID。它给了我这样的东西 -

/O=EXG5/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=TEST35345

2
看起来像是发件人地址,但不是SMTP地址,也许这个链接可以帮助你。 - jao
我该如何获取发件人的电子邮件地址,例如 - test@company.com - Nitendra Jain
2个回答

6
现在返回的地址是一个(X.400)Exchange地址。 请参阅this MSDN article,了解如何检索相应的SMTP地址。

1

我正在使用这个VBA例程来检索mailItem对象的SMTP地址:

(应该很容易移植到C#)

Private Function getSmtpMailAddress(sMail As Outlook.mailItem) As String
    Dim strAddress As String
    Dim strEntryId As String
    Dim objRecipient As Outlook.Recipient
    Dim objSession As Outlook.NameSpace
    Dim objAddressentry As Outlook.AddressEntry
    Dim objExchangeUser As Outlook.ExchangeUser
    Dim objReply As Outlook.mailItem

    On Error GoTo ErrHandler

    If sMail.SenderEmailType = "SMTP" Then
        strAddress = sMail.SenderEmailAddress
    Else
        Set objReply = sMail.reply()
        Set objRecipient = objReply.recipients.item(1)

        strEntryId = objRecipient.EntryID

        objReply.Close OlInspectorClose.olDiscard

        Set objSession = getMapiSession

        strEntryId = objRecipient.EntryID

        Set objAddressentry = objSession.GetAddressEntryFromID(strEntryId)
        Set objExchangeUser = objAddressentry.GetExchangeUser()

        strAddress = objExchangeUser.PrimarySmtpAddress()
    End If

    getSmtpMailAddress = strAddress

    Exit Function

ErrHandler:
    Err.Clear
    On Error GoTo 0
    getSmtpMailAddress = "???"
End Function

这适用于 Outlook 2007。如上所述,MSDNOutlook 2010 解决方案 看起来更好一些。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接