web-dev-qa-db-ja.com

Rを使用してOutlookの電子メールから添付ファイルをダウンロードする

毎週日曜日に添付ファイル(zipフォルダー)が記載されたメールが届きます。メールの件名は変更されません。指定された件名の最新のメールを見つけて、添付ファイルをダウンロードしたい。私は新しいRユーザーですが、これまでのところ、件名に基づいてメール本文を印刷する方法しか見つかりませんでした(stackoverflowで尋ねられた他の質問の1つから R RDCOMClientを使用してOutlookの受信トレイのメールを取得する方法は? )。理想的には、指定された日付に受信された指定された件名の電子メールを見つけて、添付ファイルをダウンロードしたいと思います。正しい方向に向けてください。どんな助けでも大歓迎です。ありがとうございました。

9
asmi

AdvancedSearchメソッドを使用して、受信トレイまたはその他のフォルダーを検索できます。

_library(RDCOMClient)
Outlook_app <- COMCreate("Outlook.Application")
search <- Outlook_app$AdvancedSearch(
    "Inbox",
    "urn:schemas:httpmail:subject = 'Super Important Email'"
)
_

これは非同期メソッドであるため、Rは検索が完了するのを待たずに次のステップに進みます。これを処理するためのAdvancedSearchCompleteイベントは存在しますが、RDCOMClientを使用してこれを行う方法を理解することができませんでした。回避策として、Sys.sleep(5)は検索を完了するのに十分な時間を与える必要があります。

これらの結果を調べて、ReceivedTimeメソッドを使用して受信時間をクエリできます。これらの時刻を日付に変換するには、1899年12月30日のMicrosoftOffice基準日を使用します。

_results <- search$Results()
results$Item(1)$ReceivedTime() # Received time of first search result
as.Date("1899-12-30") + floor(results$Item(1)$ReceivedTime()) # Received date
_

これで、特定の日付、たとえば2017年8月14日に受信した電子メールの結果を確認できます。

_for (i in 1:results$Count()) {
    if (as.Date("1899-12-30") + floor(results$Item(i)$ReceivedTime()) 
            == as.Date("2017-08-14")) {
        email <- results$Item(i)
    }
}
_

検索結果と同じように、メールの添付ファイルを確認できます。最初の添付ファイルはemail$Attachments(1)になります(電子メールの署名の写真に注意してください。これらも表示されます!)。特定の添付ファイルに興味がある場合は、FileNameメソッドで見つけることができます。必要な添付ファイルが見つかったら、それをファイルに保存して、他のファイルと同じように使用を開始できます。

_attachment_file <- tempfile()
email$Attachments(1)$SaveAsFile(attachment_file)
data <- read.csv(attachment_file)
_

ここでは一時ファイルパスを使用しましたが、もちろん、添付ファイルを永続的な場所に保存することもできます。

16
mdneuzerling