2011-12-28 32 views
9

Tôi có bổ trợ VSTO Outlook 2007. Tôi đang cố gắng để có được địa chỉ e-mail người gửi khi email mới đến Hộp thư đến.
Để làm điều đó tôi sử dụng đoạn mã sau:Outlook 2007 vsto bổ trợ. Nhận địa chỉ người gửi email

void inboxItems_ItemAdd(object Item) 
{  
    Outlook.MailItem mailItem = Item as Outlook.MailItem; 

    if (mailItem != null) 
     string emailAdress = mailItem.SenderEmailAddress; 
} 

Vấn đề là khi e-mail xuất phát từ cùng một tên miền, emailAdress chứa địa chỉ LDAP như

/O = TỔ CHỨC ĐẦU/OU = GROUP HÀNH CHÍNH FIRST/CN = NGƯỜI nHẬN/CN = ADMINISTRATOR

trong khi tôi muốn có được địa chỉ SMTP như

[email protected]

Câu hỏi của tôi là cách nhận địa chỉ người gửi SMTP từ e-mail nội bộ?

P. S.
Trong Outlook 2010, sự cố này có thể được giải quyết bằng cách sử dụng thuộc tính Người gửi. Nhưng nó không được hỗ trợ trong 2007.

item.Sender.GetExchangeUser().PrimarySmtpAddress 
+0

Nếu bạn quan tâm, vui lòng cam kết thực hiện điều này: http: //stackoverflow.com/documentation/outlook-addin/commit –

Trả lời

15

Trong Outlook 2007, bạn có thể làm điều đó như thế này:

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; 
} 
+0

Có phương pháp tương tự nào để nhận địa chỉ người gửi bằng hình ảnh cơ bản không? – ASM2701

+1

Có @ ASM2701, bạn có thể chính xác như vậy trong VB.NET. Cú pháp VB khác với cú pháp C#, không có dấu chấm phẩy hoặc dấu ngoặc nhọn, nhưng bạn có thể tìm ra nó mà không có bất kỳ vấn đề lớn nào. – GTG

+0

Nếu bạn quan tâm, hãy cam kết về điều này: http: //stackoverflow.com/documentation/outlook-addin/commit –

1

đây tôi trình bày một phương pháp có thể được sử dụng để có được địa chỉ email của người gửi bằng cách thông qua một mục email làm tài liệu tham khảo. Phương pháp tự nó sẽ quyết định thời tiết loại địa chỉ email của người gửi là SMTP hoặc Exchange. Nếu đó là Exchange, nó sẽ chuyển đổi địa chỉ email thành SMTP. Đây là mã.

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); 
     } 
    } 
0

Bạn có thể sử dụng thanh tra để nhận email hiện tại như sau.

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; 
       } 
      } 

bạn sẽ nhận được email người gửi trong người gửi Biến email.

Các vấn đề liên quan