繁体   English   中英

如何使用 Python MAPI 从 Outlook 获取“收件人”姓名和电子邮件地址

[英]How to Get 'Recipient' Names and emails address from Outlook using Python MAPI

就像.SenderName为我提供可以轻松附加到列表中的发件人姓名一样,他们的任何 object 也可以为我的邮件的“收件人”做同样的事情。

我试过.Recipients ,但一旦添加到列表中,它们就会显示为COMObjects无法操作的 COMObject。

我想要的只是一个简单的收件人姓名列表。

最简单的方法是

例子

import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.Folders["0m3r@Email.com"].Folders["Inbox"]


def get_email_address():
    for message in inbox.Items:
        print("========")
        print("Subj: " + message.Subject)
        print("Email Type: ", message.SenderEmailType)
        if message.Class == 43:
            try:
                if message.SenderEmailType == "SMTP":
                    print("Name: ", message.SenderName)
                    print("Email Address: ", message.SenderEmailAddress)
                    print("Date: ", message.ReceivedTime)
                elif message.SenderEmailType == "EX":
                    print("Name: ", message.SenderName)
                    print("Email Address: ", message.Sender.GetExchangeUser(
                                                              ).PrimarySmtpAddress)
                    print("Date: ", message.ReceivedTime)
            except Exception as e:
                print(e)
                continue


if __name__ == '__main__':
    get_email_address()

MailItem.Recipients属性返回一个Recipients集合,该集合表示 Outlook 项目的所有收件人。 例如,在 VBA 中,您可以使用以下内容:

Dim recip As Recipient
Dim allRecips As String

For Each recip In item.Recipients
    If (Len(allRecips) > 0) Then allRecips = allRecips & "; "
    allRecips = allRecips & recip.Address
Next

Outlook object model 适用于各种编程语言和应用程序。 因此,您可以使用相同的属性和方法调用来检索相同的结果。

Recipient class 的Type属性返回或设置一个 integer 表示收件人的类型。 对于 MailItem,该值可以是以下OlMailRecipientType常量之一:olBCC、olCC、olOriginator 或 olTo。

收件人 class 还提供以下属性:

  • Name - 一个字符串值,表示收件人的显示名称。
  • 地址- 表示收件人电子邮件地址的字符串。
  • AddressEntry - 与收件人对应的AddressEntry object。

Eugene Astafiev 分享的样本可能在某个时间点有效,但现在却没有。 连接到 Exchange 时的参数“.Address”现在会返回一个奇怪的字符串,而不是 email:

"/O=EXCHANGELABS/OU=EXCHANGE 管理组 (FYDIBOHF69SPDLT)/CN=RECIPIENTS/CN=537B0812B1FC48F78FBBEE417EC83959-您的姓名在这里"

.Address属性仅返回非 Exchange 帐户的 email 地址。 对于 Exchange 帐户,它会返回那个奇怪的字符串。 要仅为 Exchange 和非 Exchange 账户提取 email 地址:

for x in message.Recipients:
     try:
         print(x.AddressEntry.GetExchangeUser().PrimarySmtpAddress)
     except AttributeError:
         print(x.AddressEntry.Address)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM