s
pring對郵件發送支持的很好,咱們只要配置好郵件發送器,寫好郵件發送具體操做類的方法,那麼實現就不是很難的事,不過這個過程當中常常會出現這樣或那樣的錯誤,因此待講完本篇後我會整體總結下spring郵件發送容易發生的錯誤及解決辦法
關於郵件發送,不外乎有這麼幾種狀況,一種是純文本的發送,一種是HTML形式的發送,一種就是發送時帶有附件,一種就是發送時採起的事羣發,針對這幾個我將一一來說下,個人代碼中將第一中歸爲一大類,後面三種歸爲一代類,因此將會出現兩種配置文件html
第一大類郵件發送【純文本發送】java
必須包:spring.jar,common-logging.jar,mail.jar,servlet.jar,common-collection.jarweb
首先咱們來看spring配置文件applicationContext.xmlspring
- <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
-
- <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="host" value="smtp.163.com" />
- <property name="port" value="25" />
- <property name="username" value="emailusername" />
- <property name="password" value="emailpassword" />
- <property name="defaultEncoding" value="utf-8" />
- <property name="javaMailProperties">
- <props>
- <prop key="mail.smtp.auth">true</prop>
- </props>
- </property>
- </bean>
-
- <bean id="emailService" class="com.javacrazyer.comon.SendOrderConfirmationEmailAdvice">
- <property name="mailSender" ref="mailSender" />
- </bean>
-
- </beans></span>
用到的實體類Order.javamvc
- <span style="font-size: medium;">package com.javacrazyer.comon;
-
- import java.io.Serializable;
-
- public class Order implements Serializable {
-
-
-
- private int orderId;
- private String username;
- private String useremail;
-
- public int getOrderId() {
- return orderId;
- }
-
- public void setOrderId(int orderId) {
- this.orderId = orderId;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getUseremail() {
- return useremail;
- }
-
- public void setUseremail(String useremail) {
- this.useremail = useremail;
- }
-
- }
- </span>
郵件發送類的接口類MailService.javaapp
- <span style="font-size: medium;">package com.javacrazyer.comon;
-
-
-
-
-
-
-
- public interface MailService {
-
-
- void sendOrderMail(Order order);
-
- }
- </span>
具體實現的郵件發送類SendOrderConfirmationEmailAdvice.java框架
- <span style="font-size: medium;">package com.javacrazyer.comon;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
-
- import org.springframework.mail.MailSender;
- import org.springframework.mail.SimpleMailMessage;
-
- public class SendOrderConfirmationEmailAdvice implements MailService{
-
- private String from="emailusername@163.com";
- private String registeTemplateName = "com/javacrazyer/comon/mail_registe.txt";
- private MailSender mailSender;
-
- public void setMailSender(MailSender mailSender) {
- this.mailSender = mailSender;
- }
-
-
- public void sendOrderMail(Order order) {
-
- SimpleMailMessage mail = new SimpleMailMessage();
- mail.setFrom(this.from);
- mail.setTo(order.getUseremail());
- mail.setSubject("恭喜你成功註冊成爲SOMEDAY商城的會員!");
- mail.setText(loadTemplateContent(registeTemplateName).replaceAll("\\$\\{LOGINNAME\\}", order.getUsername()));
- this.mailSender.send(mail);
-
- }
-
-
-
- private String loadTemplateContent(String templateName){
- StringBuilder sb = new StringBuilder();
- BufferedReader br= null;
- try{
- br = new BufferedReader(
- new InputStreamReader(
- Thread.currentThread()
- .getContextClassLoader()
- .getResourceAsStream(templateName), "UTF-8"));
-
- String lineSeparator = System.getProperty("line.separator");
- for(String str = null; (str = br.readLine()) != null;){
- sb.append(str);
- sb.append(lineSeparator);
- }
- }catch(IOException e){
- e.printStackTrace();
- }finally{
- if(br != null){
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- return sb.toString();
- }
-
-
-
- }</span>
用到的mail_registe.txt函數
- <span style="font-size: medium;">親愛的${LOGINNAME}:您好!
- 恭喜你成爲SOMEDAY商城的會員!
-
- 你的登陸用戶名爲:${LOGINNAME}
- 你的登陸口令爲:******(隱藏)
-
- 本站網址:http:
- 聯繫郵箱:hr@yoursite.cn</span>
測試發送測試
- <span style="font-size: medium;">package com.javacrazyer.service.test;
-
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import com.javacrazyer.comon.MailService;
- import com.javacrazyer.comon.Order;
-
- public class UserServiceTest {
-
- @Test
- public void test() throws InterruptedException {
- ApplicationContext context = new ClassPathXmlApplicationContext(
- "applicationContext.xml");
- MailService sf = (MailService) context.getBean("emailService");
- Order order = new Order();
- order.setUsername("cheneywu");
- order.setUseremail("xxxxxx@qq.com");
- sf.sendOrderMail(order);
- }
- }</span>
注意查收郵箱中的信息哦ui
![](http://static.javashuo.com/static/loading.gif)
第二大類郵件發送【HTML格式的發送,羣發,附件】
除了上面包外,還須要spring-webmvc.jar,freemarker.jar,爲何須要freemarker呢,由於要發送HTML格式的 文件,因此要先寫好HTML內容的文件,而後用模板freemarker匹配其中的值,Spring中對freemarker也有很好的支持
spring配置文件applicatonContext-html.xml
- <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <bean id="freeMarker"
- class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="templateLoaderPath" value="classpath:mailTemplate" />
-
- <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>
-
-
- <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="host" value="smtp.163.com" />
- <property name="port" value="25" />
- <property name="username" value="emailusername" />
- <property name="password" value="emailpassword" />
- <property name="defaultEncoding" value="utf-8" />
- <property name="javaMailProperties">
- <props>
- <prop key="mail.smtp.auth">true</prop>
- </props>
- </property>
- </bean>
- <bean id="emailService" class="com.javacrazyer.comon.EmailService">
- <property name="mailSender" ref="mailSender"></property>
- <property name="freeMarkerConfigurer" ref="freeMarker"></property>
- </bean>
- </beans> </span>
模板文件目mailTemplate下的模板文件registe.ftl 【這個文件無名字、後綴無所謂,只要內容是HTML內容便可】
- <span style="font-size: medium;"><html>
- <head>
- <meta http-equiv="content-type" content="text/html;charset=utf8">
- </head>
- <body>
- 恭喜您成功註冊!您的用戶名爲:<font color='red' size='30'>${LOGINNAME}</font>
- </body>
- </html> </span>
具體郵件發送類EmailService.java
- <span style="font-size: medium;">package com.javacrazyer.comon;
-
- import java.io.File;
- import java.io.UnsupportedEncodingException;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import javax.mail.Message;
- import javax.mail.MessagingException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeUtility;
-
- import org.springframework.mail.MailSender;
- import org.springframework.mail.javamail.JavaMailSender;
- import org.springframework.mail.javamail.MimeMessageHelper;
- import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
- import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
-
- import freemarker.template.Template;
-
- public class EmailService implements MailService {
-
- private JavaMailSender mailSender;
- private FreeMarkerConfigurer freeMarkerConfigurer = null;
-
- public void setMailSender(JavaMailSender mailSender) {
- this.mailSender = mailSender;
- }
-
-
-
- public void setFreeMarkerConfigurer(
- FreeMarkerConfigurer freeMarkerConfigurer) {
- this.freeMarkerConfigurer = freeMarkerConfigurer;
- }
-
-
-
- public void sendOrderMail(Order order) {
- MimeMessage msg = mailSender.createMimeMessage();
-
-
- try {
- MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
- helper.setTo(order.getUseremail());
- helper.setFrom("emailusername@163.com");
- helper.setSubject("你好,恭喜你註冊成功");
- String htmlText;
- htmlText = getMailText(order.getUsername());
- helper.setText(htmlText, true);
- } catch (Exception e) {
-
- e.printStackTrace();
- }
-
- mailSender.send(msg);
- }
-
-
-
-
- public void sendBatchEmail(Order order, List<String> address) {
-
- MimeMessage msg = mailSender.createMimeMessage();
-
- try {
- MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
- String toList = getMailList(address);
- InternetAddress[] iaToList = new InternetAddress().parse(toList);
- msg.setRecipients(Message.RecipientType.TO, iaToList);
- helper.setFrom("emailusername@163.com");
- helper.setSubject("你好,恭喜你註冊成功");
- String htmlText = getMailText(order.getUsername());
- helper.setText(htmlText, true);
-
- helper.addInline("a", new File("E:/11.jpg"));
- helper.addInline("b", new File("E:/12.jpg"));
- File file = new File("E:/各類框架圖介紹.docx");
-
- helper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
- } catch (MessagingException e) {
-
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
-
- e.printStackTrace();
- } catch (Exception e) {
-
- e.printStackTrace();
- }
-
-
-
-
-
-
- mailSender.send(msg);
- }
-
-
-
-
- public String getMailList(List<String> to) {
- StringBuffer toList = new StringBuffer();
- int length = to.size();
- if (to != null && length < 2) {
- toList.append(to.get(0));
- } else {
- for (int i = 0; i < length; i++) {
- toList.append(to.get(i));
- if (i != (length - 1)) {
- toList.append(",");
- }
- }
- }
- return toList.toString();
- }
-
-
- private String getMailText(String content) throws Exception {
- String htmlText = "";
-
- Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(
- "registe.ftl");
- Map map = new HashMap();
- map.put("LOGINNAME", content);
-
- htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);
- return htmlText;
- }
-
- }</span>
單一發送HTML格式的郵件測試
- <span style="font-size: medium;">package com.javacrazyer.service.test;
-
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import com.javacrazyer.comon.MailService;
- import com.javacrazyer.comon.Order;
-
- public class UserServiceTest {
-
- @Test
- public void test() throws InterruptedException {
- ApplicationContext context = new ClassPathXmlApplicationContext(
- "applicationContext-html.xml");
- MailService sf = (MailService) context.getBean("emailService");
- Order order = new Order();
- order.setUsername("cheneywu");
- order.setUseremail("xxxxxx@qq.com");
- sf.sendOrderMail(order);
- }
- }
- </span>
收到郵件了
![](http://static.javashuo.com/static/loading.gif)
羣發,帶附件的測試
- <span style="font-size: medium;">package com.javacrazyer.service.test;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import com.javacrazyer.comon.EmailService;
- import com.javacrazyer.comon.Order;
-
- public class UserServiceTest {
-
- @Test
- public void test() throws InterruptedException {
- ApplicationContext context = new ClassPathXmlApplicationContext(
- "applicationContext-html.xml");
- EmailService sf = (EmailService) context.getBean("emailService");
- Order order = new Order();
- order.setUsername("cheneywu");
- List<String> maillist = new ArrayList<String>();
- maillist.add("XXXXXX@qq.com");
- maillist.add("YYYYYY@qq.com");
- sf.sendBatchEmail(order, maillist);
- }
- }
- </span>
收到郵件了哦
看到了沒有,這個上邊有兩個接收人,下邊的是附件