具体背景就不说了,可以网上搜索相关知识,或者直接看Sping MailSender的官坊网页。这里就直接实战了(Java实现异步发送电子邮件,包含中文无乱码)。

Maven:

    <dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.0</version>
</dependency>

ApplicationContext.xml:

    <!-- SET default mail properties -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.sina.com"/>
<property name="protocol" value="smtp" />
<!-- 465 for Gamil -->
<property name="port" value="25"/>
<property name="username" value="xxx@sina.com"/>
<property name="password" value="xxx"/>
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.auth">true</prop>
<!-- true for Gamil -->
<prop key="mail.smtp.starttls.enable">false</prop>
<prop key="mail.debug">true</prop>
</props>
</property>
</bean> <!--Asyn send Eamil-->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10"/>
<property name="maxPoolSize" value="30"/>
</bean> <!-- You can have some pre-configured messagess also which are ready to send -->
<bean id="preConfiguredMessage" class="org.springframework.mail.SimpleMailMessage">
<property name="to" value="xxx@gmail.com"></property>
<property name="from" value="xxx@sina.com"></property>
<property name="subject" value="Test email from sina."/>
</bean>

Email实体类:

package com.xxx;

import java.io.Serializable;

/**
* @author
*
*/
public class ApplicationEmail implements Serializable { public String getAddressee() {
return addressee;
}
public void setAddressee(String addressee) {
this.addressee = addressee;
}
public String getCc() {
return cc;
}
public void setCc(String cc) {
this.cc = cc;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
} /**收件人**/
private String addressee;
/**抄送给**/
private String cc;
/**邮件主题**/
private String subject;
/**邮件内容**/
private String content;
/**附件**/
//private MultipartFile[] attachment = new MultipartFile[0]; }

异步邮件发送封装类:

package com.xxx;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.task.TaskExecutor;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service; import com.xxx.Mailer; /**
* @author
*
*/
@Service
public class ApplicationMailer implements Mailer
{
@Autowired
private JavaMailSender mailSender; @Autowired
private TaskExecutor taskExecutor; @Autowired
private SimpleMailMessage preConfiguredMessage; /**
* 同步发送邮件
*
* @param email
* @throws MessagingException
* @throws IOException
*/
public void sendMailBySynchronizationMode(ApplicationEmail email) throws MessagingException, IOException {
Session session=Session.getDefaultInstance(new Properties());
MimeMessage mime= new MimeMessage(session);
MimeMessageHelper helper = new MimeMessageHelper(mime, true, "utf-8");
helper.setFrom("xxx@sina.com");//发件人
helper.setTo(InternetAddress.parse(email.getAddressee()));//收件人
//helper.setBcc("administrator@chinaptp.com");//暗送
helper.setReplyTo("xxx@sina.com");//回复到
helper.setSubject(email.getSubject());//邮件主题
helper.setText(email.getContent(), true);//true表示设定html格式 mailSender.send(mime);
} /**
* 异步发送邮件
*
* @param email
*/
public void sendMailByAsynchronousMode(final ApplicationEmail email){ taskExecutor.execute(new Runnable(){
public void run(){
try {
sendMailBySynchronizationMode(email);
} catch (Exception e) {
}
}
});
}
} public interface Mailer {
public void sendMailByAsynchronousMode(final ApplicationEmail email);
}

调用Service异步发送邮件:

  @Autowired
private Mailer mailer; //这是要异步发送邮件
ApplicationEmail email = new ApplicationEmail();
email.setAddressee("xxx@gmail.com");
email.setSubject("测试邮件有一份");
email.setContent("这个是内容html内容");
mailer.sendMailByAsynchronousMode(email);

这里实现异步使用的是Task Execution,也可以用异步注解@Async,或者JMS(需要J2EE环境);如果需要调度可以用Quartz(使用场景如:每天2:00需要批量给会员发邮件)

如果要实现高可靠的高并发的异步邮件发送,可以用JMS或Queue,参考

本文结束。(干货分享:Spring和JavaMail发送邮件的经验.pdf

Spring的JavaMail实现异步发送邮件的更多相关文章

  1. (三)集成 JavaMail ,实现异步发送邮件

    集成 JavaMail ,实现异步发送邮件 1.JavaMail的核心API 1.1 API功能图解 1.2 API说明 1.2.1 Message 类: 1.2.2 Transport 类 1.2. ...

  2. SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件

    一.JavaMail的核心API 1.API功能图解 2.API说明 (1).Message 类: javax.mail.Message 类是创建和解析邮件的一个抽象类 子类javax.mail.in ...

  3. Spring中javaMail通过SMTP发送邮件

    public final class Emails { /** The java mail sender. */ private static JavaMailSender javaMailSende ...

  4. Spring集成JavaMail并利用线程池发送邮件

    我们系统存在大量发送邮件的需求,项目使用的是Spring框架而JavaMail也能很好的跟Spring进行集成,由于发送邮件最好还是使用异步进行发送,所以这里就采用线程池+JavaMail进行邮件发送 ...

  5. spring利用javamail,quartz定时发送邮件 <转>

    原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...

  6. 通过spring实现javamail发送邮件功能

    以前很早的时候大家都用javamail实现发送邮件的功能,而且我们也一直沿用至今,代码拷过来用用就行了,现在我们改为用spring来实现,这样一来减少代码的复杂度,也能更好的契合spring理念 首先 ...

  7. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  8. spring boot 异步发送邮件

    发送邮件由于是一个耗时的操作,有可能需要一个几十秒的操作,但是呢,接口 是一个瞬间完成的,为了不影响接口的性能,所以需要对发送邮件的操作进行异步操作,我们这里呢,首先我们要引入发送邮件的测试模块. & ...

  9. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

随机推荐

  1. java调用执行cmd指令启动weblogic

    这里的例子是启动weblogic import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  2. STS启动失败:Failed to load the JNI shared library

    版本位不一致 jdk 版本 ↓ eclipse 版本(%STS_HOME%/STS.ini)

  3. Android 模仿微信发送图片 钟罩效果

    参考资料http://trylovecatch.iteye.com/blog/1189452 http://bbs.51cto.com/thread-1031415-1.html### 1.添加资源文 ...

  4. poj 2488 A Knight's Journey

    题目 题意:给出一个国际棋盘的大小 p*q,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 因为要求字典序输出最小,所以按下图是搜索的次序搜素出来的就是最小的. 初始方向数组:i ...

  5. 微信内置浏览器私有接口WeixinJSBridge介绍

    原文地址:http://www.3lian.com/edu/2015/05-25/216227.html 这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友 ...

  6. Spring Junit集成测试

    例子如下: package com.junge.demo.spring; import static org.junit.Assert.assertEquals; import java.util.L ...

  7. iOS Document Interaction(预览和打开文档) 编程指南

    原文:http://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/DocumentInteracti ...

  8. 如何获取 docker 容器(container)的 ip 地址

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...

  9. Python--随机生成指定长度的密码

    在浏览别人博客时学习了random模块,手痒自我练习下,写个随机生成指定长度的密码字符串的函数,拿出来供各位参考: 废话不多说,上代码: # coding: utf-8 import random i ...

  10. .NET 证书加密 存储保存 IIS授权

    最近接到一个任务,加密DotNet项目的配置文件.配置文件里需要加密的地方一共有两块,一个是数据库连接字符串,一个是自定义的所有AppSettings. 一开始接到这个任务我是拒绝的,因为压根不知道怎 ...