Перейти до основного вмісту

Пакет Nodemailer

Загальні відомості

Nodemailer - це єдиний модуль з нульовими залежностями для Node.js, призначений для надсилання електронних листів. Його основні функції включають (але не обмежуються ними):

  • незалежність від платформи
  • безпека, зокрема, доставка електронної пошти з TLS/STARTTLS та DKIM автентифікацією електронної пошти
  • Підтримка Unicode
  • HTML-контент та вкладені зображення
  • різні транспортні методи, крім підтримки SMTP.

Єдине, що потрібно для початку використання Nodemailer, - це Node.js версії 6.0 та вище. Вам також потрібно встановити сам Nodemailer. Виконайте наступну команду в командному рядку Node.js:

npm install nodemailer

Nodemailer пропонує готові вбудовані транспорти відправлення повідомлень

  • sendmail , звичайна команда sendmail для простих повідомлень.
  • SES , щоб обробляти великий трафік електронних листів, відправляючи їх за допомогою Amazon SES.
  • stream , буфер для тестування, для повернення повідомлень.

Але так само ми можемо створити свій власний спосіб транспортування – це називається зовнішній транспорт.

Налаштування поштової скриньки

SMTP є найбільш поширеним транспортером і ми будемо використовувати його у своєму прикладі при надсиланні листів. Для цього ми будемо використовувати сервіс пошти з порталу Meta.ua. З його допомогою ми зможемо перевірити працездатність нашої програми. Навіть якщо у вас ще немає облікового запису, весь процес налаштування займе лише кілька хвилин. Після того, як ми зареєструємо свою пошту. Необхідно налаштувати її, щоб Nodemailer зміг з нею працювати. Тобто виставити певні дозволи.

Виноска

Може виникнути питання, чому ми не використовуємо gmail сервіс. Ну, по-перше наприклад, в інтернеті для сервісу gmail багато. І другий останнім часом політика безпеки сервісу не вітає використання сторонніх додатків при доступі до пошти.

Перше нам треба піти в налаштування пошти

settings

Вибрати налаштування POP3/SMTP сервера

settings

І виставити дозволи, пункт два або три

settings

При надсиланні листів через SMTP-сервер meta.ua накладаються такі обмеження:

  1. Лист має бути не більше 30Мб. Нагадуємо, що при передачі листів по стандарту вкладені файли кодуються в base64, при цьому розмір вкладеного файлу збільшується в середньому в 1,5 рази.
  2. Не можна надсилати лист більше ніж 10 одержувачам (включаючи копії та приховані копії листів)
  3. З метою боротьби зі Спам-розповсюдженням не допускається надсилати більше 200 листів на день.

Установки поштових програм (POP3-клієнтів) для роботи з Вашою скринькою на meta.ua: Сервер вхідної пошти (POP3) pop.meta.ua порт 995 Сервер вихідної пошти (SMTP) smtp.meta.ua порт 465 Аутентифікація SMTP Обов'язково (як для POP3) Захищене з'єднання TLS / SSL

Відправка листа

Всі ми маємо все необхідне, щоб Nodemailer зміг підключитися до нашої пошти та почати відправлення листів. Щоб надіслати повідомлення за допомогою Nodemailer, потрібно виконати три основні кроки.

Крок перший

Необхідно створити транспортер Nodemailer. У змінній config ми вказуємо основні параметри та створюємо транспорт змінну transporter

Крок другий

Встановіть параметри повідомлення Nodemailer. На цьому етапі ми маємо вказати відправника, одержувачів повідомлення та вміст нашого повідомлення. Що ми робимо у змінній emailOptions

Крок третій

Надішліть повідомлення за допомогою sendMail() Створивши транспортер та налаштувавши повідомлення, ми можемо надіслати його за допомогою методу sendMail() :

Повний код прикладу надсилання листа:

const nodemailer = require('nodemailer');

require('dotenv').config();

const config = {
host: 'smtp.meta.ua',
port: 465,
secure: true,
auth: {
user: 'goitnodejs@meta.ua',
pass: process.env.PASSWORD,
},
};

const transporter = nodemailer.createTransport(config);
const emailOptions = {
from: 'goitnodejs@meta.ua',
to: 'noresponse@gmail.com',
subject: 'Nodemailer test',
text: 'Привіт. Ми тестуємо надсилання листів!',
};

transporter
.sendMail(emailOptions)
.then(info => console.log(info))
.catch(err => console.log(err));

Якщо відправка листа пройшла успішно, ми маємо отримати в консолі відповідь схожу на наступну. Фактично відбулося відправлення з email goitnodejs@meta.ua, на адресу noresponse@gmail.com, яка зберігається в полі emailOptions.to

{
accepted: [ 'noresponse@gmail.com' ],
rejected: [],
envelopeTime: 41,
messageTime: 56,
messageSize: 361,
response: '250 OK id=1kDSBb-0003Z5-IB',
envelope: { from: 'goitnodejs@meta.ua', to: [ 'noresponse@gmail.com' ] },
messageId: '<9848972a-ae4d-8b56-c6f6-c645a84139c9@meta.ua>'
}

Щоб надіслати текст у форматі HTML, жодних додаткових атрибутів не потрібно, просто вставте текст HTML у повідомлення з атрибутом html замість атрибута text.

Тут ви можете ознайомитись із прикладом.

Проста форма, що дозволяє надіслати листа на вказану адресу. У нас є форма для відправлення повідомлення, вона приймає ім'я, email куди треба надіслати лист, та поля для текстового повідомлення. При успішному надсиланні буде відрендеровано шаблон done. Перевірте працездатність програми та надішліть собі лист, з адреси goitnodejs@meta.ua

інформація

Пам'ятайте, що кожен день можна надіслати не більше 200 листів, не зловживайте відправкою під час перевірки :)