web-dev-qa-db-ja.com

R RDCOMClientを使用してOutlookの受信トレイの電子メールを取得するにはどうすればよいですか?

library(RDCOMClient)
## create Outlook object
OutApp <- COMCreate("Outlook.Application")

「AUX」という名前のOutlookフォルダから今日のメールを取得したいと思います。メールのタイトルを解析し、特定の条件を満たす場合は、メールの内容を解析して特定の文字列を探します。

Rからメールを書いて送信することができましたが、今のところメールを取得できません。

9
Afiq Johari

試行錯誤しながら作業を始めたサンプルコードを次に示します。

library(RDCOMClient)

folderName = "AUX"

## create Outlook object
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

folder <- outlookNameSpace$Folders(1)$Folders(folderName)
# Check that we got the right folder
folder$Name(1)

emails <- folder$Items

# Can't figure out how to get number of items, so just doing first 10
for (i in 1:10)
{
  subject <- emails(i)$Subject(1)
  # Replace "#78" with the text you are looking for in Email Subject line
  if (grepl("#78", subject)[1]){
    print(emails(i)$Body())
    break
  } 
}

申し訳ありませんが、これらのCOMオブジェクトの一部がパラメーターを必要とする理由(Subject(1)など)はわかりませんが、他のオブジェクトは必要ありません(Body()など)。これはOutlook2013で機能しましたが、2007年以降のすべてのバージョンのOutlookでも機能するはずです。

Outlookオブジェクトモデルの詳細については、 KenSlovakのOutlook2007ブック (Outlookの今後のバージョンに関連する)を取得するか、個人のWebサイト http ://www.gregthatcher.com (「スクリプト」セクションを確認してください-私は長年これらをコンパイルしています。)

9
Greg Thatcher
folderName = "foldername"

## create Outlook object
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

fld <- outlookNameSpace$GetDefaultFolder(6)

# Check that we got the right folder
fld = fld$folders(folderName)

Cnt = fld$Items()$Count()

emails <- fld$items

df = data.frame(sno = 1:Cnt,Text = "",stringsAsFactors=FALSE)

for(i in seq(Cnt)){
  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']]
}
2