2.mail"/>

Spring与JavaMail

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring与JavaMail相关的知识,希望对你有一定的参考价值。

JavaMail与Spring集成开发

  1. spring框架集成JavaMail的主要包

    技术分享

2.mail.properties

mail.smtp.host=smtp.163.com
mail.smtp.auth=true
mail.username=15511111111
mail.password=123
[email protected]

3.使用spring配置(applicationContext-mail.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"       
	xmlns:p="http://www.springframework.org/schema/p"  
	xmlns:context="http://www.springframework.org/schema/context"   
	xmlns:tx="http://www.springframework.org/schema/tx"  
	xmlns:aop="http://www.springframework.org/schema/aop"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
	http://www.springframework.org/schema/beans/spring-beans.xsd    
	http://www.springframework.org/schema/aop    
	http://www.springframework.org/schema/aop/spring-aop.xsd    
	http://www.springframework.org/schema/tx    
	http://www.springframework.org/schema/tx/spring-tx.xsd    
	http://www.springframework.org/schema/context    
	http://www.springframework.org/schema/context/spring-context.xsd">
	
	<description>JavaMail配置文件</description>
	
	<!-- 加载mail.properties文件 -->
	<context:property-placeholder location="classpath:mail.properties"/>
	
	
	<!-- 配置一个简单邮件对象 -->
	<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
	   <property name="from" value="${mail.from}"></property>
	</bean>
	
	<!-- 邮件的发送对象 -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
         <property name="host" value="${mail.smtp.host}"></property>
         <property name="username" value="${mail.username}"></property>
         <property name="password" value="${mail.password}"></property>
         <property name="defaultEncoding" value="UTF-8"></property>
         <!-- 邮件发送相关的配置信息 -->
         <property name="javaMailProperties" >
            <props>
                  <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                  <prop key="mail.debug">true</prop>
                  <prop key="mail.smtp.timeout">0</prop>
            </props>
         </property>
    </bean>
</beans>

4.发送简单邮件代码

public void testJavaMail() throws Exception{
	ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext-mail.xml");
		
	SimpleMailMessage message = (SimpleMailMessage) ac.getBean("mailMessage");//加载简单邮件对象
	JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");       //得到邮件的发送对象,专门用于邮件发送
		
	//设置简单邮件对象的属性
	message.setSubject("spring与javamail的测试");//主题
	message.setText("hello,spring and javamail ");//内容
	message.setTo("[email protected]");//收件箱
		
	//发送邮件
	sender.send(message);
}

5.发送带有图片和带附件的邮件

public void testJavaMail() throws Exception{
	ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext-mail.xml");
		
		
	JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");       //得到邮件的发送对象,专门用于邮件发送
		
//发送一个允许带图片,同时带附件的邮件
	MimeMessage message = sender.createMimeMessage();//创建一封允许带图片,同时带附件的邮件对象
		
	   //为了更好的操作MimeMessage对象,借用一个工具类来操作它
	MimeMessageHelper helper = new MimeMessageHelper(message, true);
		
	//通过工具类设置主题,内容,图片,附件
	helper.setFrom("[email protected]");
	helper.setTo("[email protected]");
	helper.setSubject("这是来自x网的一个请求");
	helper.setText("<html><head></head><body><h1>hello!!baby </h1>"
					+"<a href=http://www.baidu.com>去百度</a>"	+ "<img src=cid:image/></body></html>",true);//第二个参数说明内容要解析为html代码
		
	//添加图片
	FileSystemResource resource = new FileSystemResource(new File("E:\\原理分析.png"));
	helper.addInline("image", resource);
		
	sender.send(message);
		
	/*JavaMailSenderImpl mailSender = (JavaMailSenderImpl) ac.getBean("mailSender");
		
	//3.创建一封允许带附件的邮件对象
	MimeMessage mimeMessage = mailSender.createMimeMessage();//创建出允许带附件的邮件对象
		
		
	//4.创建出一个用于操作MimeMessage的帮助类的对象
	MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		
	//5.设置邮件的相关内容 (发送者,拼接者,主题,内容 )
	helper.setFrom("[email protected]");
	helper.setTo("[email protected]");
	helper.setSubject("带图片和附件的邮件测试");
	helper.setText("<html><head></head><body><h1>hello!!spring image html mail</h1>"
		               +"<a href=http://www.itheima.com>去百度</a>"	+ "<img src=cid:image/></body></html>", true);//cid:是固定的,后面的image是自己定义的
		
	//指定image所在的位置(是指本地电脑)
	FileSystemResource img = new FileSystemResource(new File("E:/原理分析.png"));//将本地的图片转化成一个图片资源 
	helper.addInline("image", img);//image的参数来自上面cid的取值
		
	//发送时带附件
	FileSystemResource zipResource = new FileSystemResource(new File("E:/javamail1_4_4.zip"));
	helper.addAttachment("javamail1_4_4.zip", zipResource);*/
		
	 //发送邮件
	//mailSender.send(mimeMessage);
		
		
}


项目中使用spring中的JavaMail工具类

01.需要在类中注入相关对象

private SimpleMailMessage mailMessage;
private JavaMailSender mailSender;
public void setMailMessage(SimpleMailMessage mailMessage) {
	this.mailMessage = mailMessage;
}
public void setMailSender(JavaMailSender mailSender) {
	this.mailSender = mailSender;
}

02.在spring配置文件中配置

<bean id="userService" class="com.my.qb.service.impl.UserServiceImpl">
		<property name="baseDao" ref="baseDao"></property>
		<property name="mailMessage" ref="mailMessage"></property>
		<property name="mailSender" ref="mailSender"></property>
	</bean>


03.实现功能(比如:在注册的时候,发送邮件,邮件可能发送不成功,但要保证注册完成)

/**
* 新增用户
*/
public void saveOrUpdate(final User entity) {
	if(UtilFuns.isEmpty(entity.getId())){
		//新增
		String id = UUID.randomUUID().toString();
		entity.setId(id);
		entity.getUserinfo().setId(id);
			
		//补充Shiro添加后的bug
		entity.setPassword(Encrypt.md5(SysConstant.DEFAULT_PASS, entity.getUserName()));
			
		baseDao.saveOrUpdate(entity);//记录保存
			
		//独立的比较费时的,都交给线程来做
		//spring集成javaMail
		Thread th = new Thread(new Runnable() {
			public void run() {
				try {
					mailMessage.setTo(entity.getUserinfo().getEmail());
					mailMessage.setSubject("新员工入职的系统账户通知");
					mailMessage.setText("欢迎您加入本集团,您的用户名:"+entity.getUserName()+",初始密码:"+SysConstant.DEFAULT_PASS);
						
					mailSender.send(mailMessage);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
			
		th.start();
			
			
	}else{
		//修改
		baseDao.saveOrUpdate(entity);
	}
		
}


本文出自 “秦斌的博客” 博客,请务必保留此出处http://qinbin.blog.51cto.com/11773640/1967128

以上是关于Spring与JavaMail的主要内容,如果未能解决你的问题,请参考以下文章

Spring JavaMail发送邮件

Spring JavaMail发送邮件

springboot集成junit测试与javamail测试遇到的问题

Spring中javaMail通过SMTP发送邮件

spring集成的javamail出现错误

Spring JavaMail发送邮件