spring发生邮件
2013-11-25 21:46
387 查看
Spring发送邮件依赖org.springframework.mail.MailSender接口,该接口有两个方法:
[java] view
plaincopy
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文件,内容如下:
[xhtml] view
plaincopy
<?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,内容如下:
[java] view
plaincopy
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,内容如下:
[java] view
plaincopy
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类,内容如下:
[java] view
plaincopy
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下载:
http://d.download.csdn.net/down/2620301/thc1987
[java] view
plaincopy
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文件,内容如下:
[xhtml] view
plaincopy
<?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,内容如下:
[java] view
plaincopy
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,内容如下:
[java] view
plaincopy
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类,内容如下:
[java] view
plaincopy
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下载:
http://d.download.csdn.net/down/2620301/thc1987
相关文章推荐
- 使用Spring来发邮件和执行定时任务
- Spring 发送邮件 使用File指定附件
- Spring+mybatis+SpringMVC整合发生异常:org.springframework.beans.ConversionNotSupportedException
- Spring邮件服务:Maven + Spring SMTP Mail
- 使用腾讯企业邮箱调用SpringMail或者JavaMail发送邮件的发送服务器设置
- java Spring的JavaMailSenderImpl邮件发送功能
- 使用spring javamail smtp发送html邮件
- Spring Boot中使用JavaMailSender发送邮件
- Spring配置邮件服务
- Spring发送邮件
- 【java】Spring Mail 发送邮件示例
- 使用spring实现邮件的发送(含测试,源码,注释)
- Spring中使用 JavaMailSenderImpl来实现邮件的发送
- 基于james3.0 的邮件系统(struts2.3.2 +spring3.0.1+jpa(hibernate3.6.5)实现)b/s模式--java邮件系统
- Spring容器启动时发生了什么?
- Spring中使用FreeMaker或Vilocity模板发送邮件 (转)
- java发生邮件(转)
- jdk1.4 Spring 邮件群发,行列机制
- spring与ibatis集成, 在一对一表时,发生NullPointException异常,请教各位这个为什么?
- spring邮件发送问题总结