Отправляйте электронные письма с помощью Nodemailer и читайте с помощью библиотеки IMAP.

Привет, ребята, в этой статье рассказывается об отправке электронных писем и их последующем чтении с использованием двух разных сервисов. Для отправки электронных писем я буду использовать Nodemailer, а для чтения/анализа электронных писем я буду использовать библиотеку IMAP. Теперь приступим к процессу.

ШАГ 1: Настройка конфигурации для отправки и получения почты.

Я создал файл config.js для хранения объектов конфигурации для обеих служб. Код файла довольно прост и выглядит так.

ШАГ 2: Настройте службу отправки электронной почты

Чтобы отправить почту через node-mailer, нам нужно создать объект транспортера с конфигурацией, определенной в объекте конфигурации, как показано ранее. Он в основном фокусируется на 4 параметрах, которые

  1. from // электронное письмо, отправленное с
  2. to // Отправка, может быть массивом получателей
  3. subject // тема письма
  4. HTML // тело HTML, если у вас есть шаблон
  5. text // текст, который вы хотите отправить (также можно использовать вместе с HTML)

Когда письмо отправлено, мы печатаем детали и время для перекрестной проверки результатов в конце статьи.

ШАГ 3: Создайте службу чтения почты

Этот файл довольно сложно объяснить. Я постараюсь изо всех сил объяснить, что здесь происходит.

Функция readMail в строке 5 является оболочкой для службы imap и изначально использует обратные вызовы. Код, доступный в документации, довольно сложен для понимания. Я преобразовал его, чтобы использовать асинхронный синтаксис ожидания для лучшей читабельности.

При запуске функции мы пытаемся установить соединение с нашей переданной конфигурацией почты. Если соединение успешно, мы печатаем информацию. В противном случае он переходит к блоку catch и печатает ошибку.

SearchCriteria в строке 10 используется для определения того, какой тип почты мы просматриваем. Это может быть SEEN, UNSEEN, и вместе с этим вы можете передать пользовательскую конфигурацию, например

const searchCriteria = [ 'UNSEEN', ['SINCE', 'May 20, 2021']
// Meaning to fetch all the mails unread emails since May 20, 2021

Параметры выборки определяют, что мы хотим отфильтровать в электронных письмах. В моем случае я включил заголовок и текстовую часть. Если параметр markSeen установлен в значение true, он извлечет непрочитанную почту (если searchCriteria имеет значение UNSEEN), а затем пометит ее как прочитанную.

Результаты в строке 15 возвращают много данных, из-за чего их необходимо проанализировать. Код после строки 15 полностью зависит от того, что вы ищете. Вы можете использовать регулярное выражение для извлечения соответствующих данных, но это может не всегда работать.

Поскольку я упомянул после строки 15, вам нужна функциональность пользовательского кода для точного нацеливания на ту часть почты, которую вы ищете. Я нацелился на текст письма, чтобы мы могли проверить содержание того, что мы отправили и что мы получили.

Это все, что вам нужно сделать для чтения почты с учетом searchCriteria и fetchOptions.

Шаг 4: Сборка всех модулей

Так что для этой части с целью демонстрации я бы просто отправил письмо, подождал 10 секунд и попытался прочитать отправленное письмо. Основной файл app.js тоже достаточно прост.

Наконец, давайте посмотрим на результат

Обратите внимание на период времени, в течение которого выполнялся поток программы.

Письмо было отправлено в 21:15:13

Информация о том, что программа будет ждать, поступила в 21:15:16 [3 секунды]

После тайм-аута начал получать данные в 21:15:26 [10 секунд]
Соединение успешно установлено в 21:15:29 [3 секунды]

Программа работала именно так, как было сказано. В конце отмечу, что я использовал библиотеку html-to-text для преобразования html в текст. Вот как просто читать и отправлять почту. Для получения дополнительной информации вот несколько ссылок, которые могут быть вам полезны.

Ссылка на полный код



Пакет imap



Пакет nodemailer



Пакет преобразования html в текст



Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.