5
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"
4

1 回答 1

4

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

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

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

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

链接到extrospectrgithub: https ://github.com/aecoleman/extrospectr

这解释了存储在发件人电子邮件属性中的内容的 Outlook 方法: SenderEmailAddress 属性不包含内部联系人的标准电子邮件地址

于 2020-02-19T17:30:07.960 回答