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中你可以这样做:
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的版本中可用