Tengo la siguiente configuración para el paquete nodemailer:
//App module @Module({ imports: [ MailerModule.forRoot({ transport: { host: 'localhost', port: 3000, secure: false, }, defaults: { from: '"nest-modules" <modules@nestjs.com>', }, template: { dir: __dirname + '/templates', adapter: new HandlebarsAdapter(), options: { strict: true, }, }, }), ... }) export class AppModule {}Y
//Email service export class EmailService { constructor(private readonly mailerService: MailerService) {} public example(): void { this.mailerService .sendMail({ to: 'email@gmail.com', // list of receivers from: 'test@nestjs.com', // sender address subject: 'Testing Nest MailerModule ✔', // Subject line text: 'welcome', // plaintext body html: '<b>welcome</b>', // HTML body content }) .then((r) => { console.log(r, 'email is sent'); }) .catch((e) => { console.log(e, 'error sending email'); }); } } Estoy usando mi entorno local. Tring el código de arriba me sale un error en el bloque catch: Error: Greeting never received . ¿Por qué recibo ese error y cómo enviar el correo electrónico sin ningún problema?
MailerModule.forRoot({ transport: { host: 'localhost', port: 3000, secure: false, },nodemailer intenta encontrar el agente de transferencia de correo SMTP (retransmisión) escuchando en localhost:3000. Es poco probable que haya un servidor SMTP en su máquina en el puerto 3000, por lo que lo más probable es que nodemailer no pueda recibir confirmación de nada en su puerto 3000 de que es un servidor SMTP y arroja el error que mencionó.
El código será algo como esto:
import {directTransport} from 'nodemailer-direct-transport'; //App module @Module({ imports: [ MailerModule.forRoot({ transport: directTransport({}), defaults: { from: '"nest-modules" <modules@nestjs.com>', }, template: { dir: __dirname + '/templates', adapter: new HandlebarsAdapter(), options: { strict: true, }, }, }), ... }) export class AppModule {}No estoy seguro si solo desea enviar un correo electrónico usando SMTP local o enviar un correo electrónico en cualquier SMTP disponible
si es lo último, puede usar google SMTP o mailtrap. No es necesario configurar el servidor SMTP. La configuración será
MailerModule.forRoot({ transport: { host: "smtp.gmail.com", port: "465", secure: true, auth: { user: "your_gmail_email", pass: "your_gmail_app_password" } } }) // or for mailtrap.io const nodemailer = require('nodemailer'); let transporter = nodemailer.createTransport({ host: 'smtp.mailtrap.io', port: 2525, auth: { user: "<user>", pass: "<pass>" } })En el caso de un servidor SMTP local, puede consultar smtp-server para crear un servidor SMTP o MaiDev lo ayudará a configurar un servidor SMTP localmente. MailDev también está disponible a través de la ventana acoplable que también sería más fácil.