pythonemailoutlookpywin32win32com

Extract sender's email address from Outlook Exchange in Python using win32


I am trying to extract the sender's email address from outlook 2013 using win32 package in python. There are two kinds of email address type in my Inbox, exchange and smtp. If I try to print the the sender's email address of Exchange type, I am getting this:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-

I have already gone through this link but couldn't find a function through which I can extract the smtp address.

Below is my code:

from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
folders = inbox.Folders
for msg in all_inbox:
   print msg.SenderEmailAddress  

Currently all the Email Address are coming like this:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-

I found a solution to this in VB.net link but don't know how to rewrite the same thing in Python.


Solution

  • Firstly, your code will fail if you have an item other than MailItem in the folder, such as ReportItem, MeetingItem, etc. You need to check that the Class property (exposed by all Outlook objects) is 43 (olMail).

    Secondly, you need to check the sender email address type and use the SenderEmailAddress property only for the "SMTP" address type. In VB:

     for each msg in all_inbox
       if msg.Class = 43 Then
         if msg.SenderEmailType = "EX" Then
           print msg.Sender.GetExchangeUser().PrimarySmtpAddress
         Else
           print msg.SenderEmailAddress 
         End If  
       End If
     next