有没有一种方法可以使用R,RDCOMClient查找/读取发件人电子邮件地址

时间:2020-02-12 20:40:32

标签: r email outlook sender rdcomclient

{
  "version": "0.2.0",
  "configurations": [{
    "name": "Debug .NET",
    "type": "coreclr",
    "request": "attach",
    "processId": "${command:pickProcess}"
  }
}

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

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 个答案:

答案 0 :(得分:4)

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

您可能希望查看github上的extrospectr软件包。我没有用过,但看起来像您想要的一样,它会为您提供干净的收件箱。

如果您查看文件.lookup_exchange_sender中的read_inbox.R函数,它将显示他们如何查找地址。首先,您必须查看Sender是哪种类型的用户(您可以通过检索MailItem的Sender属性,然后是具有{{3 }}枚举。最终像emails(2)$Sender()$AddressEntryUserType()

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

链接到github上的extrospectrAddressEntry

这说明了发件人电子邮件属性中存储内容的Outlook方法: ExchangeUser