nestjs 使用nodemailer 编写邮件发送模块服务
读者来稿 · song-shao与 batype 的 AI 分身对话整理
在NestJS中使用Nodemailer发送邮件,需要创建一个邮件发送模块和服务。以下是一个简单的步骤指南,帮助你设置这个功能。
1: 安装必要的包#
首先,你需要安装 nodemailer 包:
npm install nodemailer
为了在NestJS中更好的使用这些包,你也可以安装@nestjs-modules/mailer:
npm install @nestjs-modules/mailer
2: 创建邮件模块#
创建一个新的模块,比如 mail:
nest generate module mail
3: 创建邮件服务#
接下来,在 mail 模块中创建服务:
nest generate service mail
4: 配置邮件服务#
编辑 mail.service.ts 来配置和发送邮件。以下是一个示例代码:
import { Injectable } from '@nestjs/common';
import * as nodemailer from 'nodemailer';
@Injectable()
export class MailService {
private transporter: nodemailer.Transporter;
constructor() {
this.transporter = nodemailer.createTransport({
host: 'smtp.example.com', // 你的SMTP主机
port: 587, // 你的SMTP端口
secure: false, // 如果是587端口,通常是false
auth: {
user: 'your-email@example.com', // 你的SMTP用户
pass: 'your-email-password', // 你的SMTP密码
},
});
}
async sendMail(to: string, subject: string, text: string, html: string) {
const mailOptions = {
from: '"Your Name" <your-email@example.com>', // 发件人地址
to: to, // 收件人地址
subject: subject, // 主题
text: text, // 纯文本内容
html: html, // HTML内容
};
try {
const info = await this.transporter.sendMail(mailOptions);
console.log('Message sent: %s', info.messageId);
return true;
} catch (error) {
console.error('Error occurred while sending email:', error);
return false;
}
}
}
5: 使用邮件服务#
在其他模块中使用邮件服务发送邮件。例如,在 app.controller.ts 中:
import { Controller, Get } from '@nestjs/common';
import { MailService } from './mail/mail.service';
@Controller()
export class AppController {
constructor(private readonly mailService: MailService) {}
@Get('send-email')
async sendEmail() {
const result = await this.mailService.sendMail(
'recipient@example.com',
'Test Subject',
'This is a test email',
'<h1>This is a test email</h1>',
);
return result ? 'Email sent successfully!' : 'Failed to send email.';
}
}
通过访问 /send-email 路径,可以触发邮件的发送。
注意事项#
- 确保SMTP配置正确,尤其是端口号、认证用户和密码。
- 某些邮箱服务(如Gmail)可能需要应用专用密码或打开“不太安全应用的访问”。
- 在生产环境中,考虑使用更复杂的邮件服务,比如
@nestjs-modules/mailer,以获得更多功能和更好的可维护性。 - 所有敏感信息(如邮箱密码)应使用环境变量读取,而不是直接在代码中硬编码。
相关文章
- nestjs 中 JWT 鉴权登录
NestJS中实现JWT鉴权和登录的详细指南,包括安装依赖、创建模块、服务、策略和控制器,以及使用Guards保护路由。
- nestjs 配置swagger
NestJS项目中使用Swagger生成API文档的详细指南,包括安装依赖、配置Swagger、设置基础信息、认证、生成文档、添加Swagger装饰器等步骤,以及如何访问和使用Swagger文档。