spring发送邮件

来源:互联网 发布:usb端口电源限制怎么办 编辑:程序博客网 时间:2024/06/05 19:33

运行环境:Eclipse + JDK6 + Spring2.5

 

Spring发送邮件依赖org.springframework.mail.MailSender接口,该接口有两个方法:

[java] view plaincopy
  1. public interface MailSender {  
  2.     // 发送简单邮件  
  3.     void send(SimpleMailMessage simpleMessage) throws MailException;  
  4.     // 发送多封邮件  
  5.     void send(SimpleMailMessage[] simpleMessages) throws MailException;  
  6.   
  7. }  

MailSender接口下有两个子成员,关系为:
MailSender←JavaMailSender←JavaMailSenderImpl

 

其中JavaMailSenderImpl封装了发送邮件的方法

 

此外还有辅助类:org.springframework.mail.SimpleMailMessage作为send()的参数
这个类用来设置发送人,收件人,主题,内容等信息
我们可以通过Spring的注入来设置这些信息

 

需要的jar包:
commons-logging.jar(在Spring开发包中的lib/jakarta-commons文件夹下可以找到)
mail.jar (在Spring开发包中的lib/j2ee文件夹下可以找到)
spring.jar(在Spring开发包中的dist文件夹下可以找到)

如果没有Spring开发包,可查看这篇文章:

http://blog.csdn.net/thc1987/archive/2010/03/17/5389120.aspx 

 

======================
一. 简单邮件程序

 

1. 新建一个web工程:mySpringMail

2. 新建一个package:mail

3. 在mail包下新建mail.properties文件,内容如下:
mail.host=smtp.qq.com
mail.username=your username
mail.password=your password
mail.from=your email, example abc@qq.com
mail.to=his/her email

 

这里分别设置了邮件的服务器,用户名,密码,发件人,收件人.这里我们用qq的服务器,也可用sina的

 

4. 在mail包下新建mailMessage.xml文件,内容如下:

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  6.      http://www.springframework.org/schema/aop  
  7.      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"  
  8.     xmlns:aop="http://www.springframework.org/schema/aop"  
  9.     xmlns:p="http://www.springframework.org/schema/p">  
  10.       
  11.     <!-- 加载Properties文件 -->  
  12.     <bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  13.         <property name="locations">  
  14.             <list>  
  15.                 <value>classpath:/mail/mail.properties</value>  
  16.             </list>  
  17.         </property>  
  18.     </bean>  
  19.       
  20.     <!-- 申明SimpleMailMessage对象 -->  
  21.     <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">  
  22.         <property name="from">  
  23.             <!-- 设置发送方,Jack是发送者的名字 -->  
  24.             <value><!--[CDATA[Jack<${mail.from}>]]--></value>  
  25.         </property>  
  26.         <!-- 设置接收方 -->  
  27.         <property name="to" value="${mail.to}" />  
  28.         <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->  
  29.     </bean>  
  30.       
  31.     <!-- 申明JavaMailSenderImpl对象 -->  
  32.     <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">  
  33.         <property name="defaultEncoding" value="UTF-8" />  
  34.         <property name="host" value="${mail.host}" />  
  35.         <property name="username" value="${mail.username}" />  
  36.         <property name="password" value="${mail.password}" />  
  37.         <property name="javaMailProperties">  
  38.             <props>  
  39.                 <!-- 设置认证开关 -->  
  40.                 <prop key="mail.smtp.auth">true</prop>  
  41.                 <!-- 启动调试开关 -->  
  42.                 <prop key="mail.debug">true</prop>  
  43.             </props>  
  44.         </property>  
  45.     </bean>  
  46.       
  47. </beans>  

 

已有相关注释,不再说明

 

5. 在mail包中新建测试文件:SpringSimpleMailTest.java,内容如下:

[java] view plaincopy
  1. public class SpringSimpleMailTest {  
  2.     public static void main(String[] args) {  
  3.         ApplicationContext actx = new ClassPathXmlApplicationContext(  
  4.                 "mail/mailMessage.xml");  
  5.         MailSender ms = (MailSender) actx.getBean("mailSender");  
  6.         SimpleMailMessage smm = (SimpleMailMessage) actx.getBean("mailMessage");  
  7.         // 主题,内容  
  8.         smm.setSubject("你好");  
  9.         smm.setText("这个是一个通过Spring框架来发送邮件的小程序");  
  10.         ms.send(smm);  
  11.     }  
  12. }  

 

运行,如果配置没有错的话会收到邮件,如图:

===========================
二. 发送带附件的程序:

 

Spring提供了两个类:

org.springframework.mail.javamail.MimeMailMessage (这个类类似于SimpleMailMessage,都继承MailMessage)
org.springframework.mail.javamail.MimeMessageHelper

 

MimeMessageHelper是个辅助类,它封装了javax.mail.internet.MimeMessage
提供对附件,内嵌HTML的支持

 

此外在发送附件程序时,还会用到一个回调接口:MimeMessagePreparator,
并实现该接口中的void prepare(MimeMessage mimeMessage)方法

 

1. 在mail包中新建类:SpringFileMailTest.java,内容如下:

[java] view plaincopy
  1. public class SpringFileMailTest {  
  2.     public static void main(String[] args) {  
  3.         ApplicationContext actx = new ClassPathXmlApplicationContext(  
  4.         "mail/mailMessage.xml");  
  5.         JavaMailSender jms = (JavaMailSender)actx.getBean("mailSender");  
  6.         jms.send(new MimeMessagePreparator() {  
  7.             @Override  
  8.             public void prepare(MimeMessage mimeMessage) throws Exception {  
  9.                 // true表示复杂邮件  
  10.                 MimeMessageHelper mmh = new MimeMessageHelper(mimeMessage,true);  
  11.                 // 设置发送人,收件人,主题,内容  
  12.                 mmh.setFrom("发送人邮箱");  
  13.                 mmh.setTo("收件人邮箱");  
  14.                 mmh.setSubject("附件程序");  
  15.                 mmh.setText("查看附件");  
  16.                   
  17.                 // 添加附件,加载文件方式有多样,可以通过源码进行查看  
  18.                 mmh.addAttachment("1.jpg"new File("D:/1.jpg")); // D盘文件  
  19.                 mmh.addAttachment("mailMessage.xml"new ClassPathResource("mail/mailMessage.xml"));  
  20.             }  
  21.         });  
  22.     }  
  23. }  

 

其它不需配置,运行程序即可查看有无发送成功,如图:

 

 

=============================
三. 发送含有HTML内嵌资源的邮件
比方说邮件里面有张图片或者一个链接,点击图片就会跳转到指定的页面

 

这里还是用到了MimeMessageHelper类,添加资源用到了addInline()方法

 

1. 新建SpringHtmlMailTest.java类,内容如下:

[java] view plaincopy
  1. public class SpringHtmlMailTest {  
  2.     public static void main(String[] args) {  
  3.         ApplicationContext actx = new ClassPathXmlApplicationContext(  
  4.         "mail/mailMessage.xml");  
  5.         JavaMailSender jms = (JavaMailSender)actx.getBean("mailSender");  
  6.         jms.send(new MimeMessagePreparator() {  
  7.             @Override  
  8.             public void prepare(MimeMessage mimeMessage) throws Exception {  
  9.                 MimeMessageHelper mmh = new MimeMessageHelper(mimeMessage,true);  
  10.                 // 发送人,收件人,主题,内容  
  11.                 mmh.setFrom("发送人邮箱");  
  12.                 mmh.setTo("收件人邮箱");  
  13.                 mmh.setSubject("HTML和内嵌资源的邮件 程序");  
  14.                   
  15.                 // 下面两行顺序不能颠倒  
  16.                 // 添加HTML和内嵌资源  
  17.                 mmh.setText("你好,点击图片跳转:<a href="http://www.baidu.com" mce_href="http://www.baidu.com"><img src="cid:logo" mce_src="cid:logo" /></a>",true);  
  18.                 // 这里的logo要与cid:logo一致,不然无法显示图片  
  19.                 mmh.addInline("logo"new ClassPathResource("mail/baidu.gif"));  
  20.             }  
  21.         });  
  22.     }  
  23. }  

 

其它不需配置,运行该文件即可,如图:

 

demo下载:

http://d.download.csdn.net/down/2620301/thc1987

原创粉丝点击