# Введение

### Об электронной почте

Электронная почта или электронная почта теперь становится важным методом отправки сообщений между двумя людьми или двумя устройствами. Таким образом, электронная почта задумывалась как электронная (цифровая) версия или аналог почты в то время, когда «почта» означала только физическую почту (отсюда электронная + почта).

### Электронная почта в текущем мире

Позже электронная почта стала вездесущим (очень широко используемым) средством связи, до такой степени, что в настоящее время адрес электронной почты часто рассматривается как основная и необходимая часть многих процессов в бизнесе, торговле, правительстве, образовании, развлечениях и других сферах. сферы повседневной жизни в большинстве стран.

### Как работает почтовый сервер

Современные системы электронной почты основаны на модели с промежуточным хранением (хранение и пересылка — это телекоммуникационный метод, при котором информация отправляется на промежуточную станцию, где она хранится и отправляется позже в конечный пункт назначения или на другую промежуточную станцию. Промежуточная станция или узел в контексте сети проверяет целостность сообщения перед его пересылкой). Серверы электронной почты принимают, пересылают, доставляют и хранят сообщения. Ни пользователи, ни их компьютеры не обязаны быть в сети одновременно; им необходимо подключиться, как правило, к почтовому серверу или интерфейсу веб-почты, чтобы отправлять или получать сообщения или загружать их.

# Зачем нам нужно отправлять электронное письмо через NodeJS?

Давайте возьмем сценарий, в котором вам нужно отправить электронное письмо большой группе, и вам нужно отправить структурированное сообщение, например, скажем, в `html`, для этого вы не можете использовать API-интерфейс вашего поставщика услуг gmail, такой как google gmail, Microsoft Outlook и т. д. потому что вы можете использовать только услуги, предоставляемые этим API. Но если вам нужно создать свою собственную функциональность, скажем, вам нужно запланировать отправку сообщения. или вы создали приложение и для определенного события хотите получать уведомления по электронной почте. и многое другое. Вы сами можете придумать много других утилит, где электронная почта может быть вашим спасателем.

# Предпосылка

1. Установлен NodeJS [Вы можете установить его отсюда](https://nodejs.org/ru/download/)

2. Установлен nodemailer

3. Экспресс установлено

Мы так много говорили. Без лишних слов давайте разберемся с кодированием

# Давайте испачкаем руки

Итак, здесь мы говорим об электронной почте, которая, грубо говоря, правильно говорит на двух устройствах. одно устройство отправляет сообщение другому и наоборот, и если они принимают. тогда это должно быть по какому-то протоколу, который в данном случае `http`. А в nodeJS есть модуль http. Этот модуль просто фантастический, но мы собираемся использовать «express» в нашем проекте, который построен поверх «http». Итак, когда я говорю, что он построен поверх http, я имею в виду, что он абстрагируется от многих сложных кодов http и делает код удобным для нашего использования с расширенной функциональностью. Express — это минимальная и гибкая платформа веб-приложений Node.js, которая предоставляет надежный набор функций для веб-приложений и мобильных приложений.

### создание каталога nodemailer для нашего приложения

перейдите в терминал для пользователей Linux или Unix (mac) или откройте командную строку (cmd) или Power Shell для пользователя Windows

```простой текст
mkdir nodemailer
cd nodemailer
```

### установка зависимостей (Express и nodemailer)

```простой текст
npm install express — сохранить
npm install nodemailer — сохранить
```

ваш package.json будет выглядеть так

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1668934174111/K-5LYcsps.png align="left")

Обратите внимание: используется флаг сохранения, чтобы package.json автоматически обновлялся с учетом этих зависимостей.

Для тех, кто не знает, что такое package.json, вкратце он содержит все модули, которые может использовать наше приложение.

если вы хотите узнать больше о package.json, проверьте

[Дополнительная информация о пакетах и ​​модулях или package.json](https://docs.npmjs.com/about-packages-and-modules)

### Приступаем к кодированию

Создайте файл с именем index.js и откройте его в своей любимой IDE (интегрированной среде разработки).

добавьте следующую строку кода

```javascript
// экспресс-импорт
express = require('express');
// импорт nodemailer
nodemailer = require('nodemailer');

// создание экземпляра экспресса
app = express();
```

здесь у нас есть импорт экспресс и nodemailer в наш файл `index.js`. и создание экземпляра экспресс-приложения, создание экземпляра означает, как и в объектно-ориентированном программировании, мы объявили класс и создали экземпляр этого класса. Здесь также `express = require('express');` если класс и `app = express();` является экземпляром этого класса

Далее идет создание объекта транспортера nodemailer.

```простой текст
let transporter = nodemailer.createTransport({
host: “smtp.gmail.com”,
port: 587,
secure: false, // true для 465, false для остальных портов
auth: {
user: //»User_ID»,
pass: //»User_Password»,
},
});
```

SMTP — это основной транспорт в Nodemailer для доставки сообщений. SMTP также является протоколом, используемым между различными почтовыми хостами, поэтому он действительно универсален. Почти каждый провайдер доставки электронной почты поддерживает отправку на основе SMTP, даже если они в основном продвигают отправку на основе API. API-интерфейсы могут иметь больше функций, но их использование также означает привязку к поставщику, в то время как в случае SMTP вам нужно только изменить параметры конфигурации, чтобы заменить одного поставщика другим, и все готово.

Обратите внимание, что в этом примере я использовал хост gmail, если у вас другой хост, измените его в соответствии с их SMTP-конфигурацией.

Вместо `User_ID` поместите свой адрес электронной почты, а вместо своего User\_password поместите `password` своей учетной записи.

```простой текст
const message = await transporter.sendMail({
from: '"Anuj " ‹[email protected]›', // адрес отправителя
to: user, ‹«[email protected]›», // список получателей
subject: Электронное письмо с сервера nodeJS, // Строка темы
text: Привет с сервера nodeJS, / / обычный текст body
html: ‹b›Привет с сервера nodeJS‹/b›, // html body
});
```

здесь мы используем `await`, которая является асинхронной или `async` функцией, которая остановит дальнейшее выполнение и выполнит `transporter.sendMail`, который отправит электронное письмо

Давайте посмотрим, что содержит `transporter.sendMail`. У него есть

1. `from` содержит имя_отправителя и адрес_отправителя в скобках со стрелкой

2. `to` содержит имя_получателя и адрес_получателя в скобках со стрелкой
Важно отметить, что мы можем добавить столько адресов, сколько захотим (это меньше, чем тот, который поддерживает наш хост-провайдер электронной почты за раз), разделив их пробелами, например [email protected] [email protected] [email protected] …….

3. `subject`, чтобы иметь тему письма

4. `text`, он содержит простой текст, который вы отправляете, предположим, если принимающее устройство не может прочитать html, тогда он будет читать текстовое содержимое растений, присутствующее в тексте

5. `html`, мы можем добавить наш html-контент, который будет отображаться принимающим устройством.

```простой текст
console.log("Сообщение отправлено: %s", message.messageId);
```

Он распечатает подтверждение, если сообщение было отправлено в терминал.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1668939160642/hVhCEfZ28.png align="left")

# Проблемы, с которыми вы можете столкнуться

Основная проблема, с которой я столкнулся, связана с авторизацией моего идентификатора электронной почты, поскольку я использовал двухфакторную аутентификацию в учетной записи gmail, я не смог подключиться к своему почтовому хосту для отправки сообщений при создании\*\* транспортного объекта\*\* , поэтому я должен создать пароль приложения в своей учетной записи gmail и использовать его в качестве моего пользователя\_пароля в транспортном объекте. Вы можете найти решение этой [проблемы здесь] (https://community.nodemailer.com/using-gmail/ )

# Заключение

В этом блоге мы научились отправлять электронную почту с помощью nodeJS, вы можете экспериментировать с любым количеством функций, используя [документацию nodemailer](https://nodemailer.com/about/). Это базовый отправитель электронной почты nodeJS.

вы можете проверить мой [репозиторий github] (https://github.com/Anuj-Kumar-AJ/Sending-Email-using-nodeJS-and-Express/blob/main/index.js). В этом проекте я использовал систему управления версиями git, поэтому вы можете проверить, как шаг за шагом строится этот проект. Если это репо обновится в будущем, я сохраню файл git, чтобы вы могли шаг за шагом создавать проект, читая файл `README.md` для этого коммита.