Nestjs发送邮箱 (使用163邮箱)

本文档介绍了如何开启163邮箱的SMTP服务并使用NestMailerModule进行配置,包括安装依赖、设置模块及服务,以实现简单文本邮件的发送。详细步骤包括获取授权密码、配置MailerModule及创建Service进行邮件发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:开启163邮箱的SMTP服务

  • 首先开启服务,开启服务后会有一个授权密码,保存下来

在这里插入图片描述
在这里插入图片描述

二:配置Nest MailerModule模块

MailerModule配置的英文文档,官方文档有模板引擎的使用可以参考,我这边只需最简单的text即可

1. 安装依赖

npm install --save @nestjs-modules/mailer nodemailer

2.配置Module

//app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';

@Module({
  imports: [
    ...
    MailerModule.forRoot({
      transport: {
          host: "smtp.163.com",
          port: "465",
          auth: {
            user: "your eamil@163.com",
            pass: "第一步开启服务后的授权密码"
          }
        },
        from:'"your email name" <your eamil@163.com>',
      },
    }),
  ],
  ...
})
export class AppModule {}

三:配置Service

import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';

@Injectable()
export class ExampleService {
  constructor(private readonly mailerService: MailerService) {}
  
  public example(): void {
    this
      .mailerService
      .sendMail({
        to: 'test@nestjs.com', // 要发送的目标邮箱
        // from: 'noreply@nestjs.com', // 自定义发送者的邮箱,默认在mudule已配置了,可以不配置
        subject: 'Testing Nest MailerModule ✔', // 标题
        text: 'welcome', // 发送的文字
      })
      .then(() => {})
      .catch(() => {});
  }
  
}

后记

更多的例子:https://nest-modules.github.io/mailer/docs/mailer

<think>好的,用户的问题是关于在Vue前端和NestJS后端集成的项目中实现发送邮件功能。我需要先理解用户的具体需求,然后提供清晰的步骤和示例代码。 首先,用户可能已经有一个Vue和NestJS的项目,现在需要添加发送邮件的功能。通常,前端(Vue)不直接发送邮件,而是通过调用后端的API来触发邮件发送。因此,我需要分两部分来回答:NestJS后端如何配置邮件服务,以及Vue前端如何调用这个API。 对于NestJS部分,我需要考虑使用哪个邮件库。Nodemailer是一个常用的Node.js邮件发送库,所以应该推荐使用它。然后需要指导用户安装必要的依赖,比如@nestjs-modules/mailer和nodemailer,可能还需要配置模块,比如MailerModule。需要提供配置示例,包括SMTP的设置(比如host、port、secure、auth等),这些信息需要用户根据自己的邮件服务提供商来填写,比如Gmail或QQ邮箱。同时,需要提醒用户注意安全,比如不要在代码中明文存储密码,而是使用环境变量。可能还需要处理服务商的授权问题,比如开启SMTP服务或生成应用专用密码。 接下来,创建邮件服务,比如EmailService,使用@nestjs-modules/mailer提供的MailerService来发送邮件。需要编写一个发送邮件的方法,比如sendEmail,接受收件人、主题和内容等参数。然后创建控制器,比如EmailController,暴露一个API端点,比如POST /send-email,供前端调用。这里需要注意请求体的验证,可能需要使用DTO类来定义结构,并使用class-validator进行校验,比如确保邮箱格式正确。 然后是Vue前端部分,用户需要调用后端API。这里需要指导用户如何发送HTTP请求,可以使用axios库。需要展示如何在Vue组件中调用API,比如在方法中发送POST请求到后端的/send-email接口,传递必要的参数(to、subject、text)。同时,处理响应和错误,比如显示成功或失败的消息。 此外,需要注意跨域问题(CORS),确保NestJS后端允许来自Vue前端的请求。需要指导用户如何配置CORS,比如在main.ts中使用enableCors方法,设置允许的来源。 最后,可能需要给出一些优化建议,比如使用队列异步发送邮件,避免阻塞主线程;或者添加邮件模板,使用HTML格式等。同时,提醒用户安全相关的事项,比如限制发送频率,防止滥用。 在生成相关问题的时候,应该围绕集成中的常见问题,比如跨域处理、参数校验、邮件模板使用、安全配置等,帮助用户进一步了解相关主题。</think>我将分步骤为您演示Vue与NestJS集成实现邮件发送的完整流程: ### 一、NestJS后端配置(邮件服务) 1. 安装依赖 ```bash npm install @nestjs-modules/mailer nodemailer ``` 2. 配置邮件模块 ```typescript // email.module.ts import { MailerModule } from '@nestjs-modules/mailer'; @Module({ imports: [ MailerModule.forRoot({ transport: { host: 'smtp.qq.com', // 以QQ邮箱为例 port: 465, secure: true, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }, }), ], }) export class EmailModule {} ``` 3. 创建邮件服务 ```typescript // email.service.ts import { MailerService } from '@nestjs-modules/mailer'; @Injectable() export class EmailService { constructor(private readonly mailerService: MailerService) {} async sendEmail(to: string, subject: string, text: string) { await this.mailerService.sendMail({ to, subject, text, }); } } ``` 4. 创建邮件控制器 ```typescript // email.controller.ts @Post('send-email') async sendEmail(@Body() emailDto: EmailDto) { await this.emailService.sendEmail( emailDto.to, emailDto.subject, emailDto.text ); return { message: '邮件发送成功' }; } // email.dto.ts export class EmailDto { @IsEmail() to: string; @IsString() subject: string; @IsString() text: string; } ``` ### 二、Vue前端调用示例 ```vue <template> <form @submit.prevent="sendEmail"> <input v-model="form.to" placeholder="收件邮箱"> <input v-model="form.subject" placeholder="邮件主题"> <textarea v-model="form.text" placeholder="邮件内容"></textarea> <button type="submit">发送邮件</button> </form> </template> <script> import axios from 'axios'; export default { data() { return { form: { to: '', subject: '', text: '' } }; }, methods: { async sendEmail() { try { const response = await axios.post('http://localhost:3000/send-email', this.form); alert(response.data.message); } catch (error) { alert('邮件发送失败: ' + error.response?.data?.message); } } } }; </script> ``` ### 三、配置注意事项 1. 邮箱服务商配置: - QQ邮箱需开启SMTP服务并获取授权码[^1] - Gmail需启用"安全性较低的应用程序访问" - 推荐使用环境变量存储邮箱凭证 2. 跨域配置(NestJS) ```typescript // main.ts async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors({ origin: 'http://localhost:8080' // Vue前端地址 }); await app.listen(3000); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值