簡體   English   中英

Nodemailer 不在 NestJs 中發送電子郵件

[英]Nodemailer is not sending emails in NestJs

我有 nodemailer package 的下一個配置:

 //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 {}

 //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'); }); } }

我正在使用我當地的環境。 嘗試上面的代碼,我在 catch 塊中得到一個錯誤: Error: Greeting never received 為什么我收到該錯誤以及如何發送 email 沒有任何問題?

  1. 這段代碼意味着
MailerModule.forRoot({
      transport: {
        host: 'localhost',
        port: 3000,
        secure: false,
      },

nodemailer 嘗試在 localhost:3000 上查找 SMTP 郵件傳輸代理(中繼)。 它不太可能在您的機器上的 3000 端口上存在 SMTP 服務器,因此很可能 nodemailer 無法從您的 3000 端口上的任何內容收到確認它是 SMTP 服務器並拋出您提到的錯誤。

  1. 嘗試將此傳輸用於 nodemailer,它可以在沒有 SMTP 中繼https://www.npmjs.com/package/nodemailer-direct-transport的情況下工作

代碼將是這樣的:


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 {}

我不確定您是否只想使用本地 SMTP 發送 email 或發送 email 任何可用的 ZC2230ZF9171

如果是后者,您可以使用google SMTP 或mailtrap。無需設置SMTP 服務器。 配置將是

    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>"
         }
 })

如果是本地 SMTP 服務器,您可以查看smtp-server以創建 SMTP 服務器或MaiDev將幫助您在本地設置 SMTP 服務器。 MailDev 也可以通過 docker 獲得,這也會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM