Nodemailer报535认证数据错误,换端口仍遇问候超时问题求助
解决SMTP登录错误及Greeting超时问题的思路
问题背景
我正在编写一个为新用户发送魔法链接的函数,代码如下:
public async sendMagicLink(email: string) { const transporter = mailer.createTransport({ host: 'smtp.ukr.net', port: 465, secure: true, auth: { user: 'myemail', pass: 'my password', }, }); transporter.verify().then(console.log).catch(console.error); }
运行该代码时出现错误:
Error: Invalid login: 535 Incorrect authentication data at SMTPConnection._formatError
我确认凭据完全正确,且已尝试Stack Overflow和GitHub上的所有解决方案,但问题仍未解决。若将配置改为port:2525、secure:false时,会出现Error: Greeting never received错误,设置greetingTimeout也无法解决。
解决思路
核对SMTP服务器官方配置
首先确认ukr.net的SMTP官方参数:- 用户名是否需要完整邮箱地址(比如
myemail@ukr.net而非myemail),多数SMTP服务器要求完整邮箱作为登录用户名; - 检查账户是否开启了SMTP服务权限,部分邮箱需要在账户设置中手动启用“第三方应用SMTP访问”,即使密码正确,未开启权限也会触发535错误。
- 用户名是否需要完整邮箱地址(比如
排查网络层面的拦截
- 用telnet命令测试端口连通性:
telnet smtp.ukr.net 465或telnet smtp.ukr.net 2525,如果无法连接,说明端口被防火墙、云安全组或本地杀毒软件拦截,需要对应放行端口; - 若使用代理或VPN,尝试关闭后再测试,避免代理干扰SMTP握手。
- 用telnet命令测试端口连通性:
调整Nodemailer配置细节
针对465端口的认证错误,尝试补充以下配置:const transporter = mailer.createTransport({ host: 'smtp.ukr.net', port: 465, secure: true, auth: { user: '完整邮箱地址', pass: '你的密码', }, authMethod: 'LOGIN', // 强制使用LOGIN认证方式 requireTLS: true });针对2525端口的Greeting超时问题,尝试延长超时时间并临时关闭证书校验(仅测试用):
const transporter = mailer.createTransport({ host: 'smtp.ukr.net', port: 2525, secure: false, auth: { user: '完整邮箱地址', pass: '你的密码', }, connectionTimeout: 5000, greetingTimeout: 5000, tls: { rejectUnauthorized: false // 生产环境需确认服务器证书有效性后再移除 } });检查账户的安全限制
- 若邮箱开启了两步验证,必须使用应用专用密码代替原账户密码登录SMTP;
- 查看账户的登录记录,确认是否有异地IP拦截,需手动允许当前服务器/开发机的IP访问权限。
内容的提问来源于stack exchange,提问作者Oleksandra Krupnova
相关产品推荐
相关产品推荐

