使用Spring的封装的MailSender和定时任务可以实现在规定某一时间自动处理邮件群发可以提高效率。
在使用中有一些中文的乱码问题需要解决!
1.增加验证,否则会报:553 authentication is required 的错误信息
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
JavaMailSenderImpl.setJavaMailProperties(prop);
2.当邮件内容是HTML语言时的中文问题:
初始化MimeMessageHelper辅助类时,设置"GBK" encoding!如:
MimeMessageHelper messageHelp = new MimeMessageHelper(message,true,"GBK");
同时在设置:<META http-equiv=Content-Type content='text/html; charset=GBK'>
如果都设置为"UTF-8",在某些邮件客户端标题不能正常显示!
3.邮件附件的中文问题!
spring的文档里面说MimeMessageHelper设置了encoding,同时对title,text,attach产生作用,但还是会出问题:
解决方法:MimeUtility.encodeWord(file.getName());就OK了!
代码片段:
public void SendMail() {
List userList = this.gcmDao.findUserProvider();
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
//设定mail server
senderImpl.setHost("202.110.96.6");
senderImpl.setUsername("username");
senderImpl.setPassword("password");
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
senderImpl.setJavaMailProperties(prop);
//建立邮件消息,发送简单邮件和html邮件的区别
MimeMessage mailMessage = senderImpl.createMimeMessage();
//注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用,
// multipart模式
MimeMessageHelper messageHelper;
for(int i=0;i<userList.size();i++){
UserProvider user = (UserProvider)userList.get(i);
List list = this.findCpmiFileDetail(user.getUserCode());
if(!list.isEmpty()){
try {
String name = user.getUserCode()+"-"+user.getUserName()+".xls";
String dir = "c:/"+name;
messageHelper = new MimeMessageHelper(mailMessage,true,"GBK");
//设置收件人,寄件人
// mailMessage.setTo(array);
String email = user.getEmail();
if(email!=null){
messageHelper.setTo(email);
}else{
messageHelper.setTo(xxx@xxx);
}
messageHelper.setFrom("xxx@xxx");
messageHelper.setSubject("GCM預警事件管理通知!");
//true 表示启动HTML格式的邮件
String context = "<html><head><meta http-equiv='keywords' content='keyword1,keyword2,keyword3'>" +
"<meta http-equiv='description' content='this is my page'><meta http-equiv='content-type' content='text/html; charset=GBK'>" +
"</head><body><h1>"+user.getUserName()
+"你好:</h1><h1> 是你需要處理的SGS管控部分的清單!有"+String.valueOf(list.size())
+"需要處理。</h1><h1></h1><h1></h1><h1> 這是一封系統郵件,請不必回復!</h1><h1> 謝謝!</h1><h1>"+DateUtil.getDate()+"</h1></body></html>";
messageHelper.setText(context,true);
// FileSystemResource file = new FileSystemResource(new File(dir));
File file=new File(dir);
//这里的方法调用和插入图片是不同的。
try {
messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//发送邮件
senderImpl.send(mailMessage);
System.out.println("邮件发送成功.....");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}