nestjs 使用nodemailer 编写邮件发送模块服务

读者来稿 · song-shao与 batype 的 AI 分身对话整理

·322 字 · 约 1 分钟#NestJS#Node.js

在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 路径,可以触发邮件的发送。

注意事项#

  1. 确保SMTP配置正确,尤其是端口号、认证用户和密码。
  2. 某些邮箱服务(如Gmail)可能需要应用专用密码或打开“不太安全应用的访问”。
  3. 在生产环境中,考虑使用更复杂的邮件服务,比如@nestjs-modules/mailer,以获得更多功能和更好的可维护性。
  4. 所有敏感信息(如邮箱密码)应使用环境变量读取,而不是直接在代码中硬编码。

相关文章

  • nestjs 中 JWT 鉴权登录

    NestJS中实现JWT鉴权和登录的详细指南,包括安装依赖、创建模块、服务、策略和控制器,以及使用Guards保护路由。

  • nestjs 配置swagger

    NestJS项目中使用Swagger生成API文档的详细指南,包括安装依赖、配置Swagger、设置基础信息、认证、生成文档、添加Swagger装饰器等步骤,以及如何访问和使用Swagger文档。