使用Spring发送邮件常见问题汇总

1.     javax.mail.MessagingException:501 5.0.0 HELO requires domain address

出现这种错误是因为系统利用mail.jar发送邮件,需要先提取本地hostname,但由于主机上没有配置hostname,javamail 在发送helo 命令的时候找不到 hostname,直接发送helo命令 ,所以postfix返回了501 Syntax: HELO hostname 。解决方案很简单,在使用邮件服务的所有主机上配置hostname。

2.    553authentication is required

出现这种错误的原因是因为javamail中没有设置smtp身份认证,解决方案:Properties prop = newProperties();

prop.setProperty("mail.smtp.auth","true");

//省略其他属性设置

JavaMailSenderImpl.setJavaMailProperties(prop);

此处需要注意,后面的true是字符串格式,非boolean格式。

3.    邮件内容是HTML语言时中文乱码问题

设置html内容的编码格式为utf-8

<METAhttp-equiv=Content-Type content='text/html; charset=utf-8'>

初始化MimeMessageHelper辅助类时,设置"utf-8" encoding!如:
 MimeMessageHelper messageHelp =new

               MimeMessageHelper(message,true,"utf-8");

4.    邮件附件中文乱码问题

MimeUtility.encodeWord(file.getName());

 

PS: 另外在使用邮件内容是html内容的邮件中,如何生成html内容呢,看到很多人都是直接写到code中去,给人感觉非常杂乱,也不好维护,这里提供2种比较好的解决方案,一种是使用Freemarker来写邮件模板,然后把数据封装到Model中进行渲染拿到html内容,第二种是使用Spring自带的VelocityEngineUtils的mergeTemplateIntoString方法,实现;原理与Freemarker相似。但是要注意,在模板中不支持引用外部js和css,只支持将样式写在元素标签中。

你可能感兴趣的:(spring,邮件)