有没有办法使用 R, RDCOMClient find/read 发件人电子邮件地址
Is there a way to find/read the Sender Email Address using R, RDCOMClient
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"
问题是 exchange 将发件人地址存储为外部用户地址的正常 smtp 版本,但对于 Exchange 用户,它使用 MS Exchange 地址。要获得正常的 smtp 地址,您必须查找 exchange 用户并获得他们正常的 smtp 电子邮件地址。
您可能想查看 github 上的 extrospectr
包。我没有使用过它,但看起来它会像您正在寻找的那样为您提供一个干净的收件箱。
如果您查看文件 read_inbox.R
中的 .lookup_exchange_sender
函数,它会显示他们如何处理查找地址。首先,您必须查看 Sender
是什么类型的用户(您可以通过检索 MailItem 的 Sender
属性,然后检索 AddressEntryUserType property, which has this 枚举来实现)。这最终像 emails(2)$Sender()$AddressEntryUserType()
.
然后,如果它是 Exchange 用户,您将需要获取 MailItem 的 Sender
属性(这是一个 AddressEntry) and then use the GetExchangeUser
method on the AddressEntry to return an ExchangeUser 对象。一旦有了,您只需要访问 ExchangeUser 的 PrimarrySMTPAddress 属性。
当你把它们放在一起时,它看起来像这样:emails(2)$Sender()$GetExchangeUser()$PrimarySMTPAddress()
.
Link 到 github 上的 extrospectr
:
https://github.com/aecoleman/extrospectr
这解释了 Outlook 对存储在发件人电子邮件中的内容的方法 属性:
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"
问题是 exchange 将发件人地址存储为外部用户地址的正常 smtp 版本,但对于 Exchange 用户,它使用 MS Exchange 地址。要获得正常的 smtp 地址,您必须查找 exchange 用户并获得他们正常的 smtp 电子邮件地址。
您可能想查看 github 上的 extrospectr
包。我没有使用过它,但看起来它会像您正在寻找的那样为您提供一个干净的收件箱。
如果您查看文件 read_inbox.R
中的 .lookup_exchange_sender
函数,它会显示他们如何处理查找地址。首先,您必须查看 Sender
是什么类型的用户(您可以通过检索 MailItem 的 Sender
属性,然后检索 AddressEntryUserType property, which has this 枚举来实现)。这最终像 emails(2)$Sender()$AddressEntryUserType()
.
然后,如果它是 Exchange 用户,您将需要获取 MailItem 的 Sender
属性(这是一个 AddressEntry) and then use the GetExchangeUser
method on the AddressEntry to return an ExchangeUser 对象。一旦有了,您只需要访问 ExchangeUser 的 PrimarrySMTPAddress 属性。
当你把它们放在一起时,它看起来像这样:emails(2)$Sender()$GetExchangeUser()$PrimarySMTPAddress()
.
Link 到 github 上的 extrospectr
:
https://github.com/aecoleman/extrospectr
这解释了 Outlook 对存储在发件人电子邮件中的内容的方法 属性: