SMTP服务器响应DATA命令返回“500 5.5.2 Error: bad syntax”原因排查
排查SMTP DATA命令后的语法错误问题
从你提供的SMTP会话日志来看,问题核心出在邮件内容格式不符合SMTP/MIME规范,具体有几个关键错误点:
- 邮件头字段未正确分隔:你发送的所有邮件头(Subject、MIME-Version、Reply-To等)都连在了一起,没有用
CRLF(回车换行)分隔每个字段。SMTP协议要求每个邮件头必须单独占一行,以CRLF结尾。 - 邮件头与正文之间缺少强制空行:在最后一个邮件头字段(Content-Transfer-Encoding)和正文内容(
Contributed by: MBaas <***>)之间,没有插入单独的CRLF空行。这是MIME邮件的硬性要求,用来明确区分头信息和正文部分。 - 正文内的单独点号未转义:SMTP规定,如果正文里出现单独一行的
.(点号),必须转成..,否则会被服务器误判为数据结束标记。你日志里提到的“lone "."”如果是单独成行的状态,会直接触发语法错误,虽然你后面写了.. .,但前面未转义的点号已经引发了格式问题。
看最后一行服务器返回的信息,先是250 2.0.0 Ok: queued as 4668A16C05CB,随后又出现500 5.5.2 Error: bad syntax,这说明服务器先尝试接收队列,但处理数据时发现格式错误,最终抛出了语法异常。
修复建议:
- 重新格式化邮件内容,确保每个邮件头字段单独一行,用CRLF分隔;
- 在最后一个邮件头字段和正文之间添加一个空行(单独的CRLF);
- 检查正文所有内容,将单独成行的
.替换为..。
给你一个符合规范的内容示例(用CRLF分隔):
Subject: [TEST] Here it is MIME-Version: 1.0 Reply-To:<***> From:<***> Date: Fri, 29 Nov 2019 10:05:02 +0100 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding:7bit Contributed by: MBaas <***> first line and more text with a lone .. @ EOM .. .
按照这个格式调整后,应该就能解决SMTP服务器返回的语法错误问题了。
内容的提问来源于stack exchange,提问作者MBaas
相关产品推荐
相关产品推荐

