nodemailer使用授权码和不用授权码的两种方式

写在最前方:

之所以用这个标题,是因为肯定会有初学者在使用nodemailer的点点困惑,当使用邮箱密码去发送的时候,难免会报各种错

开启了SMTP的使用方式

首先一定要开启SMTP服务,怎么开启不多说,各个第三方提供商的方式都不一样
一般都在对应的web mail网站上的设置里

  yarn add nodemailer
  or
  npm i -S nodemailer
  const nodemailer = require('nodemailer');
  const mailTransport = nodemailer.createTransport({    
    host : 'smtp.example.com',    
    secure: true, // 使用SSL方式(安全方式,防止被窃取信息)    
    auth : { 
      user : '你的邮箱地址',       
      pass : '你的邮箱授权码'   
    },
  });
  const mailOptions = {
    from: '"JavaScript之禅" ', // sender address
    to: '[email protected]', // list of receivers
    subject: 'Hello', // Subject line
    // 发送text或者html格式
    // text: 'Hello world?', // plain text body
    html: 'Hello world?' // html body
  };

  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      return console.log(error);
    }
    console.log('Message sent: %s', info.messageId);
    // Message sent: <[email protected]>
  });

没有开启SMTP的方式

这个非授权码方式只是我随便取的, 因为公司的邮件服务器,不知道为什么,采用上面的方式会报错,

{ [Error: 11432:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:
] code: 'ECONNECTION', command: 'CONN' }

这个我第一反应就是, 我端口错了吗?,然后把secure设置为false,现在的报错形式为:

Host: smtp.3nod.com.cn. is not in the cert\'s altnames: DNS:mail.cuchost.com, DNS:autodiscover.cuchost.com, DNS:cp.cuchost.com, DNS:attachment.cuchost.com, DNS:webapp.cuchost.com

大意就是邮件服务器不在(CA)证书名单之内,WHAT?然后各种百度,找到了如下解释

https://cnodejs.org/topic/5a803771497a08f571384fd7
链接在这里

不看链接的请看这里

{
  host : 'smtp.example.com',    
  secure: false, // 设置为false
  auth : { 
    user : '你的邮箱地址',       
    pass : '你的邮箱密码'  
  },
  tls: {
    rejectUnauthorized: false
  },
},

2020/05/09更新~~~~~~~~~
时隔这么久, 重新再用这个nodeMailer, 本地测试是行得通的, 但是linux服务器25端口是会严格把控的, 这时可以换一个端口, 这么写:

{
  host: 'smtp.xxxx.com',
  port: 465,
  secure: true, // 设置为true
  auth: {
    user: '[email protected]',
    pass: 'xxxxx', // 类似qq这些, 需要授权码, 一般其它的企业邮箱, 不需要授权码(比如阿里邮箱, 应该)
  },
  tls: {
    rejectUnauthorized: false, // 拒绝认证就行了, 不然会报证书问题
  },
}

有些邮件服务提供商的pass是需要授权码的, 比如qq, 这时的pass就应该是你的qq授权码, 而不是密码!
谢谢观看!!!

你可能感兴趣的:(nodemailer使用授权码和不用授权码的两种方式)