Как получить входящие электронные письма Outlook с помощью R RDCOMClient?

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

Я хочу получить сегодняшнее сообщение электронной почты из папки Outlook с именем «AUX». Проанализируйте заголовок электронного письма и, если он соответствует определенным условиям, я хочу проанализировать содержимое электронного письма на наличие определенных строк.

Мне удалось написать электронное письмо от R и отправить его, но пока не могу получить электронные письма.


person Afiq Johari    schedule 03.03.2017    source источник


Ответы (2)


Вот пример кода, с которым я работал методом проб и ошибок:

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

# Just doing first 10, get total number with emails()$Count()
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 ()). Это сработало для меня в Outlook 2013, но оно также должно работать во всех версиях Outlook, начиная с 2007 года.

Чтобы получить дополнительную информацию об объектной модели Outlook, я предлагаю вам либо получить Книга Кена Словака по Outlook 2007 (по-прежнему актуальна для более поздних версий Outlook) или посетите мой личный веб-сайт, http://www.gregthatcher.com (посмотрите раздел «Скрипты» - я компилировал их много лет.)

person Greg Thatcher    schedule 04.03.2017
comment
Привет, Грег, синтаксис $ folderName не подходит для R, я опускаю знак $, но вы снова используете его для назначения «папки». Есть причина для этого? - person Afiq Johari; 06.03.2017
comment
$ Был ошибкой. Я отредактировал ответ. Также убедитесь, что вы не запускаете RStudio от имени администратора. Вы должны запустить RStudio под своей обычной учетной записью. - person Greg Thatcher; 06.03.2017
comment
Не могли бы вы объяснить, где найти документацию, в которой вы узнаете, какие COM-объекты доступны для извлечения? - person Afiq Johari; 07.03.2017
comment
Я обновил свой ответ парой ссылок. Обратите внимание, что часто проще всего найти код VBA, который делает то, что вы хотите, а затем преобразовать его в вызовы COM. - person Greg Thatcher; 07.03.2017
comment
попробуйте emails()$Count(), чтобы получить количество писем - person shaojl7; 01.08.2017
comment
Кто-нибудь пробовал это еще? В теле письма есть изображение, которое вызывает ошибку при чтении zip-файла: stackoverflow.com/questions/48695427/ - person nak5120; 09.02.2018
comment
Привет, Грег, не могли бы вы ответить на этот связанный с этим вопрос? stackoverflow.com/questions/52649215/ - person CatalystRPA; 04.10.2018
comment
@gpier, у меня нет ответа, но я бы посоветовал вам попробовать книгу Кена Словака amazon.com/Professional-Outlook-2007-Programming-S Slovak/dp/ (да, старый, но все еще очень актуальный) или свяжитесь с Кеном Словаком напрямую по s Slovaktech.com - person Greg Thatcher; 04.10.2018
comment
Вы можете получить счет как электронные письма () $ Count () - person Indranil Gayen; 26.11.2019
comment
вам нужно связать свою учетную запись в R, прежде чем вы сможете получать электронные письма? есть ли еще примеры использования этой библиотеки для электронной почты Outlook? - person AyeTown; 16.01.2020
comment
@GregThatcher, ты хоть представляешь, как нам получить адрес электронной почты отправителя? То, как я устал делать это как `` emails (1) [['SenderEmailAddress']], но это дает мне такие значения: [1] / O = EXCHANGELABS / OU = EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT) / CN = RECIPIENTS / CN = E4CD239AB9F44AC4AC0A4015B6F4805A-RATINGSDIRE - person Parth Kalra; 14.02.2020
comment
@ParthKalra, это похоже на адрес электронной почты Exchange. Вот код VBA, который я написал давно, который получает SMTP-адрес из адреса Exchange: gregthatcher.com/Scripts/VBA/Outlook/GetSmtpAddress.aspx Вы можете попробовать преобразовать этот код в R (именно так я получил приведенный выше фрагмент кода). - person Greg Thatcher; 16.02.2020

person    schedule
comment
Спасибо, Сатиш! Есть ли способ обновить этот код, чтобы вы могли прочитать вложение одного из электронных писем? - person Matt Gossett; 03.12.2020