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,只支持将样式写在元素标签中。