基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

时间:2022-08-02 05:13:28

在虽然日常生活中,QQ,微信等即时聊天工具几乎主导了人们的生活,但是邮件依然是现代生活不可缺少的一部分。这篇文章主要讲述使用node.js 中的nodemail模块操作阿里云的企业邮箱发送邮件

(526错误的解决办法请前往2.nodemail的红字部分查看)

1.拥有一个阿里云的企业邮箱

首先登录阿里云官网,在右上角可以进入阿里云邮箱

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

然后就可以进入企业邮箱的登录界面

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

这里大概讲一下阿里云的企业邮箱的获取方法,笔者是在买ECS服务器的时候阿里云赠送的(已经使用过的请自动忽略)

如果你也有赠送的,但是之前没有使用过的同学

可以在控制台当中的云市场中

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

在云市场中的域名下面的分类中可以找到企业邮箱板块

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

在管理中你可以看到你的企业邮箱的相关信息

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

你可以在这里进入邮箱的登录页面

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

可以在这里设置邮箱的解析域名

也就是可以将企业邮箱解析到你的域名上


2.nodemailer

准备好阿里云企业邮箱之后,先了解一下我们会用到的API及参数设置

这里就不讲nodemailer的安装了,不会的朋友可以自行百度一下,有许多相关的博客文章写的挺好的

在这里我截了几张官网上的图大概讲解一下Api

这里主要讲一下SMTP服务器

其他的邮件服务器操作与之类似

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

下面是定义一个Smtp的对象

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

后面邮件的发送都是通过这个对象来操作

先看一下这个options里面的参数

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

至于下面的安全传输层协议,我们需要设置的只需要将secure设置为true即可

host参数 阿里云企业邮箱STMP服务器地址为 smtp.mxhichina.com 其他的邮件服务器地址请前往官网查看https://help.aliyun.com/knowledge_detail/36576.html?spm=5176.8071678.877627.duankou.75556b384n2RqH

这里我还是贴一张图

基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

这里的加密端口也就是我们将secure参数设置为true后所使用的端口

然后在auth参数中一般使用user、pass两个参数

user指的是邮箱的登录账号

pass是邮箱账号的登录密码(QQ邮箱等一些邮箱需要使用授权码的方式登录,授权码是个坑望诸君谨慎行事)


这里插播一段526错误的解决办法,当时这个身份验证的错误卡了笔者很久,故花一些文字记录一下

526错误是身份验证错误,官网上的说法是服务器地址不对、用户名错误、或者用户名与密码不匹配

在查询一些博客后,526报错仍未解决(此处解决情况可能为个例,也许不具备普遍性,希望大家能少踩坑)

我这里的解决办法是用阿里云企业邮箱的管理员账户,创建一个子账户,使用这个子账户进行网站的发信

(再说一个坑的地方就是阿里云的子账户分配后需要修改子账户的密码,他有一个提示说不能使用域名作为密码,这里只要密码中包含了域名比如www.taobao.com 的域名只要你密码中有taobao就过不了验证,是真的坑!!)

 let transporter = nodemailer.createTransport({
"host": "smtp.mxhichina.com",
"port": 465,
"secure": true, // use SSL
"auth": {
"user": 登录阿里云企业邮箱的账号(和from的内容一致),
"pass": 阿里云企业邮箱对应账号的密码 // password
}
});
let mailOptions = {
from: 发信邮箱(注意发信邮箱要和阿里云企业邮箱的账号一致),
to: 收件人邮箱,
subject:邮件主题,
text: 邮件内容,
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
});

通过这里的代码就可以发送邮箱了,亲测有效

至于为什么管理员账号不能发信,可能需要特殊的设置或者权限吧(笔者猜测)

有知道为啥的大佬欢迎在评论区给我留言