Пакет 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 багато. І другий останнім часом політика безпеки сервісу не вітає використання сторонніх додатків при доступі до пошти.
Перше нам треба піти в налаштування пошти
Вибрати налаштування POP3/SMTP сервера
І виставити дозволи, пункт два або три
При надсиланні листів через SMTP
-сервер meta.ua
накладаються такі
обмеження:
- Лист має бути не більше 30Мб. Нагадуємо, що при передачі листів по
стандарту вкладені файли кодуються в
base64
, при цьому розмір вкладеного файлу збільшується в середньому в 1,5 рази. - Не можна надсилати лист більше ніж 10 одержувачам (включаючи копії та приховані копії листів)
- З метою боротьби зі Спам-розповсюдженням не допускається надсилати більше 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 листів, не зловживайте відправкою під час перевірки :)