Smtp邮件服务原理与拍错

背景:最近给一家客户安装服务,发现nodemailer邮件服务怎么发送都失败
开始的报错是greeting never received,然后各种尝试添加各种配置项,并未解决问题

终端测试:

telnet xxx 25  -->220
HELO xxx  -->250
auth login  -->334(等待服务器返回后输入账号密码对应的base64码)
mail from: xxx -->250
rcpt to: xxx, xxx
data
Subject: xxx
Hello,
xxx
.
 发送成功会返回success

base64加密解密
客户加了白名单,跳过auth login这一步,通过终端测试发现可以发送邮件
通过nodemail发送失败
在终端测试的过程中发现,telnet 25端口后等待时间很长才会返回20x的响应码

抓包分析

从抓包文件可以看到:

123  三次握手后,等待了10s,服务端没有响应
45 10s后客户端发起挥手
6 挥手时服务端又返回220
789  这时客户端再发起挥手,结束一次请求

smtp包传输正常应该是

  • ->tcp三次握手 [SYN],[SYN, ACK],[ACK]
  • ->smtp交互完成
  • ->tcp挥手 [FIN, ACK],[ACK]

处理

从日志看,服务端10s是有返回的,而客户端10s后则开始挥手,终端测试正常
所以发现,nodemailer默认的超时时间是10s,于是找到node_modules中smtp-connection/src/smtp-connection.js
修改320行,将10000超时时间设置为20000,重启邮件服务,解决
但问题根本在于网络请求服务端等待10s后才响应,排查中..

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦