【问题标题】:Is there a way to find/read the Sender Email Address using R, RDCOMClient有没有办法使用 R,RDCOMClient 查找/读取发件人电子邮件地址
【发布时间】:2020-02-20 03:31:17
【问题描述】:
library("tm")
library("NLP")
library("dplyr")
library("readtext")
library("readxl")
library("foreach")
library("devtools")
library("RDCOMClient")
library("rlist")

WDF = vector()
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

folderName = "Folder Name"
fld <- outlookNameSpace$GetDefaultFolder(6)
fld = fld$folders(folderName)
Cnt = fld$Items()$Count()
emails <- fld$items
df = data.frame(sno = 1:Cnt,Text = "",stringsAsFactors=FALSE)

for(i in 1:10){
  d = as.data.frame(emails(i)$Body(), stringsAsFactors=FALSE)
  df$Text[i] = d[1]
  df$Sender[i] = emails(i)[['SenderName']]
  df$To[i] = emails(i)[['To']]
  df$sub[i] = emails(i)[['subject']]
}
emails(2)[['SenderName']] 

我正在尝试使用以下代码获取发件人电子邮件地址:

emails(2)[['SenderEmailAddress']]

但它最终会像这样给予:

[1] "/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=E4CD239AB9F44AC4AC0A4015B6F4805A-RATINGSDIRE"

【问题讨论】:

    标签: r email outlook sender rdcomclient


    【解决方案1】:

    问题在于,exchange 将发件人地址存储为外部用户的正常 smtp 版本地址,但对于 Exchange 用户,它使用 MS Exchange 地址。要获得正常的 smtp 地址,您必须查找交换用户并获取他们的正常 smtp 电子邮件地址。

    您可能想查看 github 上的 extrospectr 包。我没有使用过它,但它看起来会给你一个干净的收件箱,就像你正在寻找的那样。

    如果您查看文件read_inbox.R 中的.lookup_exchange_sender 函数,它会显示他们如何处理查找地址。首先,您必须查看Sender 是什么类型的用户(您可以通过检索MailItem 的Sender 属性,然后检索具有this 枚举的AddressEntryUserType 属性来实现)。这最终就像emails(2)$Sender()$AddressEntryUserType()

    那么如果是 Exchange 用户,则需要获取 MailItem 的 Sender 属性(即 AddressEntry),然后在 AddressEntry 上使用 GetExchangeUser 方法返回 ExchangeUser 对象.一旦你有了,你只需要访问 ExchangeUser 的 PrimarrySMTPAddress 属性。 当你把它们放在一起时,它看起来像这样:emails(2)$Sender()$GetExchangeUser()$PrimarySMTPAddress()

    链接到 github 上的extrospectrhttps://github.com/aecoleman/extrospectr

    这解释了 Outlook 方法用于存储在发件人电子邮件属性中的内容: SenderEmailAddress property does not contain a standard email address for internal contacts

    【讨论】:

    • 感谢 @AColeman 进行编辑以改进我的答案并创建 extrospectr
    • 我很高兴它派上了用场! @Parth Kalra,如果它解决了您的问题,请接受此答案,或者提供有关您在尝试在您的机器上实现它时收到的错误或问题的详细信息。
    • @Roger-123 谢谢你,这真的很有帮助。
    • @AColeman 使用提到的相同解决方案它可以工作,但是当我们要找到一个大列表时,它需要很长时间。目前我有超过 50k 的电子邮件 ID 需要扫描。有什么办法让它更健壮吗?
    • @Roger-123 你能帮助它变得更健壮吗?这需要很长时间,假设 1 个 ID 需要 1 到 2 秒。
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多