Как я могу получить доступ к электронной почте и получить входящие сообщения через pop3 или imap, используя язык R?

Если я хочу проверить входящие сообщения электронной почты Outlook с помощью R, через pop3 или imap, как я могу это сделать? Мне нужно загрузить (автоматически) некоторые вложения из почтового ящика в RStudio


person John Lios    schedule 16.08.2017    source источник
comment
Я не вижу текущих пакетов R для этого; но зачем вам это нужно?   -  person Max    schedule 16.08.2017
comment
@Max Мне нужно загрузить (автоматически) некоторые вложения из почтового ящика в RStudio   -  person John Lios    schedule 17.08.2017
comment
Не могли бы вы написать сценарий на каком-нибудь другом языке, например Python или Java, и поместить их где-нибудь в файловой системе для доступа R?   -  person Max    schedule 17.08.2017
comment
Может это вариант   -  person John Lios    schedule 17.08.2017


Ответы (1)


Извините за поздний ответ, но он может быть полезен будущим посетителям.

С 2019 года вы можете использовать mRpostman для выполнения команд IMAP изнутри R. Можно выполнять операции с почтовым ящиком, искать и получать сообщения и т. Д. Начиная с версии 0.3.0, вы также можете загружать вложения.

ИЗМЕНИТЬ МАРТ 2021 г.

Начиная с версии v0.9.X, mRpostman начал использовать синтаксис R6. Таким образом, большинство функций из предыдущих версий стали методами. Это означает, что теперь они должны вызываться connection_object$method() способом.

Простой (ОБНОВЛЕННЫЙ) пример загрузки вложений в сочетании с поиском предыдущего сообщения с использованием критерия даты (сообщения, отправленные в определенную дату):

Шаг 1) настройте подключение к серверу Outlook:

Обратите внимание, что URL-адрес "imaps://outlook.office365.com" используется по умолчанию для серверов, использующих Office 365.

con <- configure_imap(url="imaps://outlook.office365.com",
                  username="[email protected]",
                  password=rstudioapi::askForPassword())

#  other IMAP providers that were tested: Hotmail ("imaps://imap-mail.outlook.com"),
#  Gmail (imaps://imap.gmail.com), Yahoo (imaps://imap.mail.yahoo.com/), 
#  AOL (imaps://export.imap.aol.com/), Yandex (imaps://imap.yandex.com)

шаг 2) Выберите папку INBOX

con$select_folder(name = "INBOX")

Шаг 3) Поиск сообщений по определенному критерию / критериям, например, сообщения, полученные в определенную дату.

res1 <- con$search_on(date_char = "02-Jan-2020")

шаг 4) Альтернатива 1: получить содержимое сообщения (текст или основной текст) + извлечь вложения.

con$fetch_text() %>% # or with fetch_body()
  con$get_attachments()

шаг 4) Альтернатива 2: получать прикрепленные файлы напрямую

con$fetch_attachments()

Другой подход с оператором pipe %>%:

con$search_on(date_char = "02-Jan-2020") %>%
  con$fetch_text() %>% # or with fetch_body()
  con$get_attachments()

# OR

con$search_on(date_char = "02-Jan-2020") %>%
  con$fetch_attachments()

В результате во всех этих примерах mRpostman создаст каталог [email protected]/INBOX, содержащий подпапки, соответствующие идентификаторам вашего сообщения (или сообщений). Внутри подпапок вы найдете вложения.

Примечание. Если вы пытаетесь получить большие файлы (и, следовательно, большие сообщения), может потребоваться увеличить аргумент timeout_ms и / или buffersize внутри configure_imap().

введите описание изображения здесь

Для подробного ознакомления с функциями mRpostman посетите официальный сайт пакета: https://allanvc.github.io/mRpostman/

ИЗМЕНИТЬ 2:

Был задан вопрос, можно ли искать по метке времени. Хотя протокол IMAP не поддерживает такой поиск, для этого существует хитрый подход. Предположим, мы хотим найти все сообщения, полученные ровно в 07:30 с 3 марта 2021 года.

con$search(AND(
   since(date_char = "03-Mar-2021"),
   string(expr="07:30", where = "HEADER Date")
))
person allanvc    schedule 13.07.2020
comment
Спасибо, Аллан! Можно ли искать по дате / времени? - person Matt Gossett; 01.03.2021
comment
Я получаю следующую ошибку при запуске этого кода для получения вложений электронной почты: Ошибка в get_attachments (.): Не удалось найти функцию get_attachments. - person Matt Gossett; 04.03.2021
comment
Что касается упомянутой вами ошибки, это произошло из-за того, что мой ответ был устаревшим. Начиная с версии 0.9.X, mRpostman использует синтаксис R6. Мой ответ теперь дополнен новым синтаксическим подходом, включая пример с поиском по дате. Если это было полезно, не забудьте проголосовать. Спасибо! - person allanvc; 06.03.2021
comment
Привет, Мэтт. Пожалуйста! Возможен поиск по дате, но не по отметке времени. Согласно RFC 3501 протокол IMAP не поддерживает этот тип поиска. Однако есть хитрый подход к достижению этого с помощью комбинации настраиваемого поиска since/before/on() + string(). Я добавил это к своему ответу выше. - person allanvc; 06.03.2021