除了Spring的相关jar包外,还需要mail.jar(在使用MyEclipse 6.0时,web工程引用的J2EE 1.4 Libraries中的mail.jar会引起jar包冲突,导致发送邮件时授权验证失败,需将此jar包引用去除)。
1.获取邮件发送器
1)代码方式:
JavaMailSenderImpl sender = new JavaMailSenderImpl(); // 设定Mail Server及端口号 sender.setHost("smtp.163.com"); sender.setPort(xxx); // SMTP验证时,需要用户名和密码 sender.setUsername("xxx"); sender.setPassword("xxx");
2)xml中bean配置方式(相关配置信息放置在属性文件中):
<!-- 邮件发送 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>${email.host}</value> </property> <property name="port"> <value>${email.port}</value> </property> <property name="username"> <value>${email.username}</value> </property> <property name="password"> <value>${email.password}</value> </property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <!—自定义的属性,可在代码中获取 --> <prop key="sendFrom">${email.sendFrom}</prop> </props> </property> </bean>
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); // 获取邮件发送器 JavaMailSenderImpl sender = (JavaMailSenderImpl) wac.getBean("mailSender"); // 获取配置的发送人邮件地址 String sendFrom = (String) sender.getJavaMailProperties().get("sendFrom");
2.邮件对象的创建
1)简单文本邮件
public static void main(String[] arg) throws Exception { JavaMailSenderImpl sender = new JavaMailSenderImpl(); //设定Mail Server及端口号 sender.setHost("smtp.163.com"); sender.setPort(xxx); // SMTP验证时,需要用户名和密码 sender.setUsername("xxx"); sender.setPassword("xxx"); //建立简单文本邮件 SimpleMailMessage mailMessage = new SimpleMailMessage(); //设定收件人、寄件人、主题与内文 mailMessage.setFrom("xxx"); mailMessage.setTo("xxx");//数组发送给多个联系人 mailMessage.setSubject("Test"); mailMessage.setText("This is a test mail"); // 传送邮件 sender.send(mailMessage); System.out.println("邮件传送OK.."); }
2)可带附件邮件
public static void main(String[] arg) throws Exception { JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); // 设定Mail Server及端口号 senderImpl.setHost("smtp.163.com"); senderImpl.setPort(xxx); senderImpl.setUsername("xxx"); senderImpl.setPassword("xxx"); //创建Mime邮件(可包含附件、设置为html格式) MimeMessage mailMessage = senderImpl.createMimeMessage(); /* *Create a new MimeMessageHelper for the given MimeMessage, *in multipart mode (supporting alternative texts, inline elements and attachments) if requested. */ MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8"); // 设定收件人、寄件人、主题与内文 messageHelper.setFrom("xxx"); messageHelper.setTo("xxx"); messageHelper.setSubject("Test"); // true 表示启动HTML格式的邮件 messageHelper.setText( "<html><head></head><body><h1>hello!</h1></body></html>", true); File file = new File("d:/test.xlsx"); if (file.exists()) { // 添加附件并对文件名处理,避免中文乱码 FileSystemResource fileAdd = new FileSystemResource(file); messageHelper.addAttachment(MimeUtility.encodeWord(fileAdd.getFilename()), fileAdd); } // 传送邮件 senderImpl.send(mailMessage); System.out.println("邮件传送OK.."); }
3)邮件内容使用模板
在创建html邮件时可以使用模板技术生成邮件正文内容,例中使用FreeMarker,添加jar包文件freemarker.jar。
创建模板文件src/mailTemplate/mailTemplate.ftl,内容如下:
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf8"> </head> <body> ${user} 您好!<br/> 。。。。。。。 <br/><br/> --------------------------------- <br/> ${currentDate}<br/> 联系人:刘德华<br/> 电话 :18688886666<br/> 邮箱 :[email protected]<br/> </body> </html>
发送邮件业务类中FreeMarker配置类注入:
private FreeMarkerConfigurer freeMarker; public void setFreeMarker(FreeMarkerConfigurer freeMarker) { this.freeMarker = freeMarker; }
xml中对应bean配置:
<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <!--指定模板文件目录--> <property name="templateLoaderPath" value="classpath:mailTemplate" /> <!-- 设置FreeMarker环境属性--> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒--> <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 --> <prop key="locale">zh_CN</prop><!-- 本地化设置--> </props> </property> </bean>根据模板获取邮件正文内容方法:
//根据模板文件获取邮件内容 private String getEmailContent() { try { //获取模板文件 Template template = freeMarker.getConfiguration().getTemplate("mailTemplate.ftl"); //对模板中的可变信息进行配置 Map<String, String> map = new HashMap<String, String>(); map.put("user","xxx"); map.put("currentDate",Util.getNowDate("yyyy-MM-dd")); String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); return content; } catch (TemplateException e) { logger.error("Error while processing FreeMarker template ", e); } catch (FileNotFoundException e) { logger.error("Error while open template file ", e); } catch (IOException e) { logger.error("Error while generate Email Content ", e); } return ""; }
其它操作可参考: http://www.open-open.com/lib/view/open1338109120604.html