运行环境:Eclipse + JDK6 + Spring2.5
Spring发送邮件依赖org.springframework.mail.MailSender接口,该接口有两个方法:
- public interface MailSender {
- // 发送简单邮件
- void send(SimpleMailMessage simpleMessage) throws MailException;
- // 发送多封邮件
- void send(SimpleMailMessage[] simpleMessages) throws MailException;
- }
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文件,内容如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:p="http://www.springframework.org/schema/p">
- <!-- 加载Properties文件 -->
- <bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:/mail/mail.properties</value>
- </list>
- </property>
- </bean>
- <!-- 申明SimpleMailMessage对象 -->
- <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
- <property name="from">
- <!-- 设置发送方,Jack是发送者的名字 -->
- <value><!--[CDATA[Jack<${mail.from}>]]--></value>
- </property>
- <!-- 设置接收方 -->
- <property name="to" value="${mail.to}" />
- <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
- </bean>
- <!-- 申明JavaMailSenderImpl对象 -->
- <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="defaultEncoding" value="UTF-8" />
- <property name="host" value="${mail.host}" />
- <property name="username" value="${mail.username}" />
- <property name="password" value="${mail.password}" />
- <property name="javaMailProperties">
- <props>
- <!-- 设置认证开关 -->
- <prop key="mail.smtp.auth">true</prop>
- <!-- 启动调试开关 -->
- <prop key="mail.debug">true</prop>
- </props>
- </property>
- </bean>
- </beans>
已有相关注释,不再说明
5. 在mail包中新建测试文件:SpringSimpleMailTest.java,内容如下:
- public class SpringSimpleMailTest {
- public static void main(String[] args) {
- ApplicationContext actx = new ClassPathXmlApplicationContext(
- "mail/mailMessage.xml");
- MailSender ms = (MailSender) actx.getBean("mailSender");
- SimpleMailMessage smm = (SimpleMailMessage) actx.getBean("mailMessage");
- // 主题,内容
- smm.setSubject("你好");
- smm.setText("这个是一个通过Spring框架来发送邮件的小程序");
- ms.send(smm);
- }
- }
运行,如果配置没有错的话会收到邮件,如图:
===========================
二. 发送带附件的程序:
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,内容如下:
- public class SpringFileMailTest {
- public static void main(String[] args) {
- ApplicationContext actx = new ClassPathXmlApplicationContext(
- "mail/mailMessage.xml");
- JavaMailSender jms = (JavaMailSender)actx.getBean("mailSender");
- jms.send(new MimeMessagePreparator() {
- @Override
- public void prepare(MimeMessage mimeMessage) throws Exception {
- // true表示复杂邮件
- MimeMessageHelper mmh = new MimeMessageHelper(mimeMessage,true);
- // 设置发送人,收件人,主题,内容
- mmh.setFrom("发送人邮箱");
- mmh.setTo("收件人邮箱");
- mmh.setSubject("附件程序");
- mmh.setText("查看附件");
- // 添加附件,加载文件方式有多样,可以通过源码进行查看
- mmh.addAttachment("1.jpg", new File("D:/1.jpg")); // D盘文件
- mmh.addAttachment("mailMessage.xml", new ClassPathResource("mail/mailMessage.xml"));
- }
- });
- }
- }
其它不需配置,运行程序即可查看有无发送成功,如图:
=============================
三. 发送含有HTML内嵌资源的邮件
比方说邮件里面有张图片或者一个链接,点击图片就会跳转到指定的页面
这里还是用到了MimeMessageHelper类,添加资源用到了addInline()方法
1. 新建SpringHtmlMailTest.java类,内容如下:
- public class SpringHtmlMailTest {
- public static void main(String[] args) {
- ApplicationContext actx = new ClassPathXmlApplicationContext(
- "mail/mailMessage.xml");
- JavaMailSender jms = (JavaMailSender)actx.getBean("mailSender");
- jms.send(new MimeMessagePreparator() {
- @Override
- public void prepare(MimeMessage mimeMessage) throws Exception {
- MimeMessageHelper mmh = new MimeMessageHelper(mimeMessage,true);
- // 发送人,收件人,主题,内容
- mmh.setFrom("发送人邮箱");
- mmh.setTo("收件人邮箱");
- mmh.setSubject("HTML和内嵌资源的邮件 程序");
- // 下面两行顺序不能颠倒
- // 添加HTML和内嵌资源
- mmh.setText("你好,点击图片跳转:<a href="http://www.baidu.com" mce_href="http://www.baidu.com"><img src="cid:logo" mce_src="cid:logo" /></a>",true);
- // 这里的logo要与cid:logo一致,不然无法显示图片
- mmh.addInline("logo", new ClassPathResource("mail/baidu.gif"));
- }
- });
- }
- }
其它不需配置,运行该文件即可,如图:
demo下载: