Как отправить электронное письмо с помощью Node.js на локальном компьютере?

Как настроить отправку электронной почты через gmail или yandex для подтверждения аккаунта на локальном хосте с помощью NestJS CLI и получаемую ошибку при использовании smtp-relay.gmail.com или smtp.yandex.ru?
  • 12 мая 2024 г. 20:00
Ответы на вопрос 1
Для отправки электронного письма с помощью Node.js на локальном компьютере, вы можете использовать модуль nodemailer. Вот пример кода, который отправляет электронное письмо на адрес [email protected]:

```javascript
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  host: 'localhost',
  port: 25,
  secure: false
});

const mailOptions = {
  from: '[email protected]',
  to: '[email protected]',
  subject: 'Test Email',
  text: 'This is a test email'
};

transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    console.log(error);
  } else {
    console.log('Email sent: ' + info.response);
  }
});
```

Для настройки отправки электронной почты через gmail или yandex с помощью NestJS CLI, вам нужно сначала настроить конфигурацию для отправки почты. Вам нужно будет добавить ваши данные для авторизации в файле app.module.ts. Вот пример:

```typescript
const transporter = nodemailer.createTransport({
  host: 'smtp.yandex.ru',
  port: 465,
  secure: true,
  auth: {
    user: '[email protected]',
    pass: 'your-password'
  }
});
```

При использовании smtp-relay.gmail.com или smtp.yandex.ru на локальном хосте вы можете столкнуться с ошибкой "Error: self signed certificate in certificate chain". Это связано с тем, что почтовые серверы gmail и yandex используют SSL сертификаты, которые не могут быть проверены на локальном хосте. 

Чтобы обойти эту ошибку, можно добавить опцию tls.rejectUnauthorized: false к конфигурации транспорта nodemailer:

```typescript
const transporter = nodemailer.createTransport({
  host: 'smtp.yandex.ru',
  port: 465,
  secure: true,
  auth: {
    user: '[email protected]',
    pass: 'your-password'
  },
  tls: {
    rejectUnauthorized: false
  }
});
```

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