先贴上错误信息, 便于搜索引擎采集, 也送给遇到此问题的技术朋友们.
smtp 501 Syntax error (no parameters allowed) (#5.5.4)
背景描述:
使用 TCP 发送邮件, 在使用新浪邮箱进行 smtp 发送邮件时报出该错误 (其他邮箱可能也存着该问题),QQ 邮箱无该问题.
========================================================
发送邮件其实很简单, 对于像鄙人这种极限追求精简的人来说, 肯定不乐意使用第三方邮件插件. 使用方式, 结构, 代码中的流程, 不一定符合本人的开发习惯. 故此自己通过 TCP 编写发送邮件的实例, 源码地址: https://gitee.com/coodyer/Coody-Framework/tree/original/coody-mail
以上截图是一次 smtp 发送过程抓包情况, 实际上只需要建立连接, 然后遵循以上规范发送相应的 TCP 报文即可.
代码如图 (修复后)(可直接上码云下载源代码):
过去一直使用腾讯邮箱, 然当我更换新浪邮箱的时候, 抛出了让本人非常无语的错误, 无尽的 501 错误.
smtp 501 Syntax error (no parameters allowed) (#5.5.4)
从错误来看, 错误码是 501, 而细分下去的错误是 5.5.4
通过查阅 SMTP 错误码描述来看:
501 5.5.4 | Invalid Address | 不合法的 IP 地址 |
若收信端邮件服务器是 MS Exchange Server 5.5, 2000, 2003 而收到此错误讯息时, | 请与收信端邮递员联络并附上 http://support.microsoft.com/kb/291828. 将 Exchange Server 予以修正。 |
不合法的 IP 地址, 鄙人再三确认, 发信的 host 没写错, smtp.sina.com. 去新浪邮箱查看发信地址, 确信是 smtp.sina.com 无误.
而发送邮件时响应内容如下:
- 220 smtp-2-194.smtpsmail.fmail.yf.sinanode.com ESMTP
- 250-smtp-2-194.smtpsmail.fmail.yf.sinanode.com
- 250-AUTH LOGIN PLAIN
- 250-AUTH=LOGIN PLAIN
- 250-STARTTLS
- 250 8BITMIME
- 250 smtp-2-194.smtpsmail.fmail.www.baihua178.cn yf.sinanode.com
Exception in thread "main" org.coody.framework.mail.exception.MailException: 邮件服务器初始化失败: 250 smtp-2-194.smtpsmail.fmail.yf.sinanode.com
- at org.coody.framework.mail.sender.EmailSender.init(EmailSender.java:57)
- at org.coody.framework.mail.sender.EmailSender.<www.feishenbo.cn t>(EmailSender.java:34)
- at org.coody.framework.mail.sender.EmailSender.main(EmailSender.java:129)
于是使用 QQ 邮箱发送一遍邮件, 走查正常的响应内容:
- 220 smtp.qq.com Esmtp QQ Mail Server
- 250 smtp.qq.com
- 220 Ready to start www.lafei6d.cn
- 334 VXNlcm5hbWU6
- 334 UGFzc3dvcmQ6
- 235 Authentication successful
- 250 Ok
- 250 Ok
- 354 End data with <CR><LF>.<CR><LF>
- 250 Ok: queued as
发现第一行,
QQ 邮箱: 220 smtp.qq.com Esmtp QQ Mail Server
新浪邮箱: 220 smtp-2-194.smtpsmail.fmail.yf.sinanode.com ESMTP
这是我们在建立 socket 连接后, 发送 HELO(EHLO) 前服务器返回的信息.
通过测试发现, 原因很简单, 当我们连上 socket(smtp) 发信服务器后
服务器重新指定了特定的 esmtp 地址 (或者对我们来说, 叫做别名更合适吧)
故此, 我们发送 HELO(EHLO) 时, 键入的 smtp, 必须是服务器指定的 esmtp 标识
- 220 smtp-2-194.smtpsmail.fmail. www.qiaoheibpt.com .sinanode.com ESMTP
- 250-smtp-2-194.smtpsmail.fmail.yf.sinanode.com
- 250-AUTH LOGIN PLAIN
- 250-AUTH=LOGIN PLAIN
- 250-STARTTLS
- 250 8BITMIME
- 250 smtp-2-194.smtpsmail.fmail.yf.sinanode.com
Exception in thread "www.huizhonggjpt.cn" org.coody.framework.mail.exception.MailException: 邮件服务器初始化失败: 250 smtp-2-194.smtpsmail.fmail.yf.sinanode.com
- at org.coody.framework.mail.sender.EmailSender.init(www.jiuhuaylgw.cn EmailSender.java:57)
- at org.coody.framework.mail.sender.EmailSender.<init>(www.xinyueylzc.cn EmailSender.java:34)
- at org.coody.framework.mail.sender.EmailSender.main(www.tengyao3zc.cn EmailSender.java:129)
于是使用 QQ 邮箱发送一遍邮件, 走查正常的响应内容:
- 220 smtp.qq.com Esmtp www.lafei6v.cn Mail Server
- 250 smtp.qq.com
- 220 Ready to start TLS
- 334 VXNlcm5hbWU6
- 334 UGFzc3dvcmQ6
- 235 Authentication successful
- 250 Ok
- 250 Ok
- 354 End data with <CR><LF>.www.shentuylzc.cn <CR><LF>
- 250 Ok: queued as
于是:
不出意外, 当我们看到了 250 ok queue id 85626825952741 的响应, 结果并没有太大意外. 我们成功收到了邮件
====================================
注: 鄙人并不了解邮件服务器的协议规范, 纯属跟随 tcp 包进行模拟, 如有解说不正确的地方, 专业人员可指出并修改. 鄙人只是苦于在网上找不到相关技术资料, 故此将鄙人的解决方案记录在此, 送给碰到此问题的朋友们.
来源: http://www.bubuko.com/infodetail-3356557.html