用 javamail 做发送邮件程序,使用的是163的邮箱作为代理,但是无法正常发送邮件。报com.sun.mail.smtp.SMTPSenderFailedException: 550 5.8.1 Local user only.的错误的原因是from指定的邮箱不在163的邮箱列表中。163等邮件服务器有这样的限制,from邮箱必须是163存在的邮箱,而且登录账户的邮箱和from指定的邮箱必须是同一个邮箱。
1、 服务器返回“535 Error: authentication failed
SMTP身份验证出错了。现在大多数的邮箱提供的发送邮件服务器(SMTP)都需要身份验证。需要在Foxmail【帐户属性】对话框的【邮件服务器】属性页中,选中【SMTP邮件服务器需要身份验证】,并在【POP3邮箱账号】和【密码】下填写正确的邮箱账号和密码。
如果帐户属性中填写的SMTP与POP3服务器不是由同一个邮箱提供上提供的,请单击属性页中【设置】按钮,在验证信息对话框中填写与SMTP对应的验证信息。
注意:个别邮箱需要用完整的邮件地址作为验证信息,需要在【POP3邮箱账号】一栏填写完整的E-mail地址。
2、 服务器返回“553 Error: authentication is required”。
这是因为客户端软件没有使用ESMTP方式发送邮件,只要选中帐户属性中的【SMTP邮件服务器需要身份验证】选项即可。即使没有选中【SMTP邮件服务器需要身份验证】选项,发送邮件时,Foxmail也会自动尝试以ESMTP方式发送,因此这种发送失败的情况在Foxmail中已经很少出现了。
3、 服务器返回“550: Invalid User”、“550:local user only”或者“551 delivery not allowed to non-local recipient”。
这是由于服务器对发件人地址进行检查,对于发件人地址不是由本服务器提供的邮件,不予已发送。
解决的办法是:打开Foxmail【帐户属 性】中对话框,在【个人信息】的【电子邮件地址】中填写SMTP服务器所属的邮箱系统提供的邮件地址。
4、 服务器返回“501 syntax.helo hostname”或者“501 Invalid domain name”。
这时应该检查您的计算机名称是否含有中文或者非ASCII字符,由于某些SMTP服务器不允许。因此,需要把计算机名称改为只含有英文字母或ASCII字符。
需要将 transporter 对象上的 secure 键设置为 true:
let transporter = nodemailer.createTransport({
host: "mail.hostname.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: 'user@hostname.com', // generated ethereal user
pass: 'password', // generated ethereal password
}
});
参考链接:https://www.coder.work/article/5111338