SpringBoot邮件发送,产生javax.mail.MessagingException: 500 Error: bad syntax错误

小感触 2020年03月30日 240次浏览

今天使用SpringBoot集成的电子邮件发送功能发送邮件,按道理来说因为已经有了相关的starter-mail,在pom里面引入之后很方便的就能完事,但是事与愿违。反倒是花费了自己很多的时间,先把问题堆栈信息扔出来:

EHLO 
500 Error: bad syntax
HELO 
500 Error: bad syntax



org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: 500 Error: bad syntax
. Failed messages: javax.mail.MessagingException: 500 Error: bad syntax

; message exception details (1) are:
Failed message 1:
javax.mail.MessagingException: 500 Error: bad syntax

	at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:2339)
	at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:1663)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:728)
	.......

大体上就是一直出现: 500 Error: bad syntax 来提示我说语法出现了错误,所以也就一直在反复的检查使用的端口,地址,发送相关代码等等。参考网上其他文章一般也就是从这几个方面切入的。但是遗憾的是就我今天来看,问题并不是出现在以上提到的那些地方。

后来参考另外一篇关于使用Calibre推送邮件的文章(参考链接),也出现了类似的问题,但是是从DNS这一方面入手的,大致的原因如下:

在发送ehlo阶段会附带上DNS后缀,但是按正常要求来说,这个后缀是不允许存在空格的,在Calibre中报错信息体现了这一点:

send: ‘ehlo DLT2OV5HAK32WXJ.DHCP HOST\r\n’,send: ‘helo DLT2OV5HAK32WXJ.DHCP HOST\r\n

因此按照文章中给出的思路,修改下自己当前网络中的DNS后缀即可:

  • 找到自己当前的网络适配器
  • 右键,属性。
  • 点击IPV4设置
  • 在展开的配置框下面选择“高级”,在出现的界面里面,选择DNS选项卡:
    TIM截图20200330170740.png

注意配置后缀为host即可,原来的DNS后缀可能是具有空格的比如“DHCP HOST”,因此才造成了Java中提示的所谓语法错误,只是这个语法错误说的很隐晦,不容易让人联想到这一点。

另外就是在使用这种方式解决的时候,我原来的网络适配器是没有DNS后缀的,也是使用这种方式,主动配置了一个host后缀才可以。

记一下吧,一个问题耽误了那么久...