RDCOMClient читает электронную почту из пути к файлу не из Outlook - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть несколько электронных писем, сохраненных вне моей директории Outlook, например. при некотором пути к файлу "C:\\Users\\foo\\bar.msg".

Я хотел бы прочитать эти письма в R, используя library(RDCOMClient); следующий этот вопрос Мне удалось прочитать электронные письма в R из моей структуры папок Outlook. Однако, учитывая объем электронных писем, невозможно импортировать их в Outlook для чтения оттуда.

Ответ на этот вопрос предполагает, что в VBA вы можете использовать OpenSharedItem для чтения электронных писем из внешней папки, однако я не смог перевести это во что-то, что работает в R. Моя попытка:

library(RDCOMClient)

OutApp <- COMCreate("Outlook.Application")
outlookNameSpace <- OutApp$GetNameSpace("MAPI")

message_path <- "C:\\Users\\foo\\bar.msg"
message <- OutApp$OpenSharedItem("message_path")

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Вам может не понадобиться вообще использовать RDCOMClient для этого. hrbrmstr имеет пакет на своем github под названием msgxtractr , который содержит функцию read_msg, которая принимает в качестве входных данных путь к файлу и возвращает объект списка со всеми деталями сообщения.

Чтобы установить пакет из github, используйте

# install.packages("remotes")
remotes::install_github("hrbrmstr/msgxtractr")
# Alternate GitLab Repo:
# remotes::install_gitlab("hrbrmstr/msgxtractr")

После установки пакета вы можете использовать:

msgxtractr::read_msg("C:\\Users\\foo\\bar.msg")

Вероятно, стоит протестировать RDCOMClient решение против msgxtractr. Я подозреваю, что RDCOMClient будет немного медленнее и, вероятно, менее стабильным (поскольку он взаимодействует между приложениями).

0 голосов
/ 22 февраля 2020

Оказалось, что в моем примере выше указана неправильная ссылка на объект: при вызове CreateItemFromTemplate

я ссылаюсь на OutApp, а не outlookNamespace. Сохранение вопроса, поскольку это может спасти кому-то еще поиск и интерполировать Раствор VBA в R.

Рабочий раствор:

library(RDCOMClient)

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

message_path <- "C:\\Users\\foo\\bar.msg"      
message <- outlookNameSpace$OpenSharedItem(message_path)
...