Outlook 2007 vsto插件.获取电子邮件发送地址

本文关键字:地址 电子邮件 获取 2007 vsto 插件 Outlook | 更新日期: 2023-09-27 18:19:00

我有一个VSTO Outlook 2007插件。当新邮件进入收件箱时,我正在尝试获取发件人的电子邮件地址。要做到这一点,我使用以下代码:

void inboxItems_ItemAdd(object Item)
{     
    Outlook.MailItem mailItem = Item as Outlook.MailItem;
    if (mailItem != null)
        string emailAdress = mailItem.SenderEmailAddress;  
}

问题是当电子邮件来自同一域时,emailaddress包含LDAP地址,如

/O=第一组织/OU=第一管理组/CN=收件人/CN=管理员

而我想获得SMTP地址,如

administrator@orgname.com

我的问题是如何从内部域获得电子邮件的SMTP发件人地址?

P。年代。
在Outlook 2010中,这个问题可以通过使用Sender属性来解决。但是2007年不支持。

item.Sender.GetExchangeUser().PrimarySmtpAddress

Outlook 2007 vsto插件.获取电子邮件发送地址

在Outlook 2007中你可以这样做:

private string GetSmtpAddress(Outlook.MailItem oItem)
{
    Outlook.Recipient recip;
    Outlook.ExchangeUser exUser;
    string sAddress;
    if (oItem.SenderEmailType.ToLower() == "ex")
    {
        recip = Globals.ThisAddIn.Application.GetNamespace("MAPI").CreateRecipient(oItem.SenderEmailAddress);
        exUser = recip.AddressEntry.GetExchangeUser();
        sAddress = exUser.PrimarySmtpAddress;
    }
    else
    {
        sAddress = oItem.SenderEmailAddress.Replace("'", "");
    }
    return sAddress;
}

这里我要介绍一个方法,它可以通过传递一个电子邮件项目作为引用来获取发件人的电子邮件地址。它自己的方法将决定发件人的电子邮件地址类型是SMTP还是Exchange。如果是Exchange,它会将电子邮件地址转换为SMTP。下面是代码。

    internal static string GetSenderEmailAddress(ref Outlook.MailItem oM)
    {
        Outlook.PropertyAccessor oPA = null;
        Outlook.AddressEntry oSender = null;
        Outlook.ExchangeUser oExUser = null;
        string SenderID;
        string senderEmailAddress;
        try
        {                
            if (oM.SenderEmailAddress.Contains("@") && oM.SenderEmailAddress.Contains(".com")) //Handing smtp email addresses
            {
                senderEmailAddress = oM.SenderEmailAddress;
            }
            else //Handing exchange email addresses
            {
                // Create an instance of PropertyAccessor 
                oPA = oM.PropertyAccessor;
                // Obtain PidTagSenderEntryId and convert to string 
                SenderID = oPA.BinaryToString(oPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0C190102"));
                // Obtain AddressEntry Object of the sender 
                oSender = Globals.ObjNS.GetAddressEntryFromID(SenderID);
                oExUser = oSender.GetExchangeUser();
                senderEmailAddress = oExUser.PrimarySmtpAddress;
            }
            Debug.DebugMessage(3, "OutlookHelper : GetSenderEmailAddress() : Completed");
            return senderEmailAddress;
        }
        catch (Exception ex)
        {
            MessageBox.Show( ex.Message);
            return null;
        }
        finally
        {
            if (oExUser != null) Marshal.ReleaseComObject(oExUser);
            if (oSender != null) Marshal.ReleaseComObject(oSender);
            if (oPA != null) Marshal.ReleaseComObject(oPA);
        }
    }

您可以使用检查器获取当前的电子邮件,如下所示。

 Outlook.Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();
            if (inspector != null)
            {
                Outlook.MailItem  mi = inspector.CurrentItem as Outlook.MailItem;
              //Then identify whether email sender is exchange user or normal user
               string senderEmail=null;
               if (mi.SenderEmailType == "EX")
                {
                senderEmail = mi.Sender.GetExchangeUser().PrimarySmtpAddress;                    
                 }
              else
                {
                 senderEmail=mi.SenderEmailAddress;
                }
             }

email。发件人必须在高于outlook 2007的版本中可用