En esta sección, aprenderemos cómo configurar y utilizar el servicio de correo electrónico AWS SES (Simple Email Service) con Nodemailer en una aplicación NestJS. AWS SES es un servicio de correo electrónico escalable y rentable que te permite enviar correos electrónicos en aplicaciones web y móviles.
Primero, asegúrate de tener los siguientes paquetes instalados en tu proyecto de NestJS:
$ npm install aws-sdk nodemailer
-
Asegúrate de tener una cuenta de AWS y que tu aplicación tenga acceso a AWS SES. Obtén tus credenciales de AWS Access Key ID y Secret Access Key.
-
Configura las variables de entorno en tu archivo
.env
o en tu sistema operativo para almacenar tus credenciales de AWS:
AWS_REGION=us-east-1
AWS_ACCESS_KEY=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_SES_FROM=your_email_address
A continuación, implementaremos un servicio de correo electrónico utilizando AWS SES y Nodemailer en NestJS. Este servicio se encargará de enviar correos electrónicos utilizando la configuración de AWS SES que hemos establecido.
import { Injectable, Logger } from '@nestjs/common';
import { IMailService, mailParams } from '../../core/interfaces/index.interface';
import * as aws from '@aws-sdk/client-ses';
import { ConfigService } from '@nestjs/config';
import * as nodemailer from 'nodemailer';
@Injectable()
export class MailService implements IMailService {
private ses: aws.SES;
private transporter: nodemailer.Transporter;
private readonly logger = new Logger(MailService.name);
constructor(private readonly configService: ConfigService) {
this.ses = new aws.SES({
region: this.configService.get('AWS_REGION'),
credentials: {
accessKeyId: this.configService.get('AWS_ACCESS_KEY'),
secretAccessKey: this.configService.get('AWS_SECRET_ACCESS_KEY'),
},
});
this.transporter = nodemailer.createTransport({
SES: { aws, ses: this.ses },
});
}
async sendMail(params: mailParams) {
const { to, subject, text, attachments, html } = params;
const mailOptions = {
from: this.configService.getOrThrow<string>('AWS_SES_FROM'),
to,
subject,
text,
html,
attachments,
};
try {
await this.transporter.sendMail(mailOptions as any);
this.logger.log(
'Email sent',
JSON.stringify({
...mailOptions,
attachments: undefined,
html: undefined,
}),
);
} catch (error) {
this.logger.error(error);
}
}
}
En el código anterior, creamos una clase MailService
que implementa la interfaz IMailService
. El constructor de la clase configura el cliente de SES de AWS y el transportador de Nodemailer utilizando las credenciales y la región proporcionadas en la configuración.
El método sendMail
acepta los parámetros del correo electrónico, como el destinatario, el asunto, el texto, el HTML y los archivos adjuntos, y utiliza el transportador de Nodemailer para enviar el correo electrónico utilizando AWS SES.
Para usar el servicio
de correo en tu aplicación, simplemente importa el servicio MailService
y llame al método sendMail
con los parámetros adecuados:
import { Controller, Post, Body } from '@nestjs/common';
import { MailService } from '../services/aws-ses.service';
@Controller('email')
export class EmailController {
constructor(private readonly mailService: MailService) {}
@Post('send')
async sendEmail(@Body() body: any) {
const { to, subject, text } = body;
await this.mailService.sendMail({
to,
subject,
text,
});
}
}
En el ejemplo anterior, creamos un controlador EmailController
con un método sendEmail
que acepta los parámetros del correo electrónico (destinatario, asunto y texto) del cuerpo de la solicitud. Luego, llamamos al método sendMail
del servicio MailService
para enviar el correo electrónico.
Por último, debemos configurar el módulo de NestJS para que pueda utilizar el servicio de correo de AWS:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { MailService } from './services/aws-ses.service';
@Module({
imports: [ConfigModule.forRoot()],
providers: [MailService],
exports: [MailService],
})
export class AwsModule {}
En el módulo de NestJS, importamos el módulo de configuración para acceder a las variables de entorno y registramos el servicio MailService
como un proveedor. También exportamos el servicio para que pueda ser utilizado en otros módulos.
En esta guía, aprendimos cómo configurar y utilizar AWS SES con Nodemailer en una aplicación NestJS. Configuramos la conexión a AWS SES utilizando las credenciales de AWS y la región correspondiente. Implementamos un servicio de correo utilizando Nodemailer y el cliente de SES de AWS, y luego lo utilizamos en un controlador para enviar correos electrónicos. Recuerda ajustar la configuración según tus necesidades y asegurarte de tener las credenciales de AWS correctas.
de donde sale '../../core/interfaces/index.interface'; ? como se que debo tener ahi ?