以下例子是使用spring发送email,然后加载到固定的模板,挺好的,大家可以试试

需要使用到spring-context 包 和 com.springsource.org.apache.velocity-1.6.2.jar 其他都是常用包,自选,包括commons 系列包

代码如下

package asia.wildfire.mail;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties; import javax.mail.internet.MimeMessage; import org.apache.velocity.app.VelocityEngine;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.ui.velocity.VelocityEngineUtils; /**
* Created with IntelliJ IDEA.
* User: liuxiaochen
* Date: 13-9-22
* Time: 下午6:50
* 修改描述
*/
public class ActsocialMailSender {
//从配置文件中读取相应的邮件配置属性
private static final String emailHost = "smtp.gmail.com";
private static final String userName = "****@gmail.com";
private static final String password = "********";
private static final String mailAuth = "true";
private static Map<String, Object> proMap = null;
private static JavaMailSenderImpl instance = null;
private static VelocityEngine velocityEngine = null; static {
proMap = new HashMap<String, Object>();
proMap.put("resource.loader", "class");
proMap.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); } public static JavaMailSender getInstance() {
if (null == instance) {
synchronized (JavaMailSenderImpl.class) {
if (null == instance) {
instance = new JavaMailSenderImpl();
instance.setHost(emailHost);
instance.setUsername(userName);
instance.setPassword(password);
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", mailAuth);
//使用gmail发送邮件是必须设置如下参数的 主要是port不一样
  if (emailHost.indexOf("smtp.gmail.com")>=0) {
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.port", "465");
properties.setProperty("mail.smtp.socketFactory.port", "465");
}
instance.setJavaMailProperties(properties);
}
}
} return instance;
} public static VelocityEngine getVelocityEngineInstance() {
if (null == velocityEngine) {
synchronized (VelocityEngine.class) {
if (null == velocityEngine) {
velocityEngine = new VelocityEngine();
for (Map.Entry<String, Object> entry : proMap.entrySet()) {
velocityEngine.setProperty(entry.getKey(), entry.getValue());
}
}
}
}
return velocityEngine;
} public static void sendEmail(final Map<String,Object> model,final String subject,final String vmfile,final String[] mailTo,final String [] files)
{
MimeMessagePreparator preparator = new MimeMessagePreparator() {
//注意MimeMessagePreparator接口只有这一个回调函数
public void prepare(MimeMessage mimeMessage) throws Exception
{
MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true,"GBK");
//这是一个生成Mime邮件简单工具,如果不使用GBK这个,中文会出现乱码
//如果您使用的都是英文,那么可以使用MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(mailTo);//设置接收方的email地址
message.setSubject(subject);//设置邮件主题
message.setFrom(userName);//设置发送方地址
String text = VelocityEngineUtils.mergeTemplateIntoString(
ActsocialMailSender.getVelocityEngineInstance(), vmfile, "UTF-8", model);
//从模板中加载要发送的内容,vmfile就是模板文件的名字
//注意模板中有中文要加GBK,model中存放的是要替换模板中字段的值
message.setText(text, true);
//将发送的内容赋值给MimeMessageHelper,后面的true表示内容解析成html
//如果您不想解析文本内容,可以使用false或者不添加这项
FileSystemResource file;
for(String s:files)//添加附件
{
file = new FileSystemResource(new File(s));//读取附件
message.addAttachment(s, file);//向email中添加附件
}
}
};
ActsocialMailSender.getInstance().send(preparator);//发送邮件
} public static void sendAlertEmail(final Map<String,Object> model,final String[] mailTo){
sendEmail(model, "", "", mailTo, new String[]{});
}
}

以上代码就是发送邮件所需要的代码,可以看下

测试类

public class ActsocialEmailTest {
public static void main(String[] args) {
Map<String,Object> model = new HashMap<String,Object>();
model.put("userName","xiaochen.liu");
model.put("emailAddress", "xiaochen.liu@xingxinghuo.com");
ActsocialMailSender.sendEmail(model,"欢迎加入", "welcome.vm",new String[]{"****@gmail.com"},new String[]{}); }
}

模板文件如下

welcome.vm

<html>
<body>
<h3>您好 $!{userName}, 欢迎您加入actsocial!</h3> <div>
您的email地址是<a href="mailto:${emailAddress}">$!{emailAddress}</a>.
本条信息是系统自动发送,请勿回复!
</div>
</body> </html>

好了就这么多

使用spring 并加载模板发送Email 发邮件 java 模板的更多相关文章

  1. 廖雪峰Java13网络编程-2Email编程-1发送email

    1.邮件发送 1.1传统邮件发送: 传统的邮件是通过邮局投递,从一个邮局到另一个邮局,最终到达用户的邮箱. 1.2电子邮件发送: 与传统邮件类似,它是从用户电脑的邮件软件(如outlook)发送到邮件 ...

  2. iOS 打电话、发短信、发邮件功能

    打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicat ...

  3. iOS中打电话、打开网址、发邮件、发短信等

    常用小功能 小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [ ...

  4. AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。

    AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...

  5. Python【yagmail】模块发邮件

    #步骤一:import yagmail #步骤二:实例化一个发邮件的对象username = '553637138@qq.com' #邮箱账号pwd='sa2008' #授权码mail = yagma ...

  6. 使用Spring发送Email

    配置Spring发送邮件 Spring发送邮件底层还是使用JavaMail,我在http://www.cnblogs.com/lz2017/p/6882925.html 中记录过关于JavaMail的 ...

  7. 第19章-使用Spring发送Email

    1 配置Spring发送邮件 Spring Email抽象的核心是MailSender接口.顾名思义,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如图19.1所示. 图1 ...

  8. Spring 发送 Email

    本文转自:http://zl198751.iteye.com/blog/757617 看到了本文,收获颇丰,感谢之至! 首先介绍下Email的发送流程: 需要选中smtp邮件服务器,Yahoo不提供免 ...

  9. spring boot 学习(十)SpringBoot配置发送Email

    SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...

随机推荐

  1. Ajax发送Post请求

    Ajax发送post请求与发送get请求大致类似.以下看详细实例.首先看JSP显示页面: <form action="servlet/LoginServlet" method ...

  2. Linux 内核开发 - 进程空间

    1.1 虚拟内存 Linux 的系统.假设每一个任务都独立的占用内存,则实际的物理内存将非常快消耗殆尽.实际上对于前台正在执行的任务来说,所须要要的内存并不多,非常多任务基本不须要执行,也就没有必要一 ...

  3. avalon2学习心得(1)

    github上,avalon2的项目描述是这样的:“avalon2是一款基于虚拟DOM与属性劫持的 迷你. 易用. 高性能 的 前端MVVM框架, 适用于各种场景, 兼容各种古老刁钻浏览器, 吸收最新 ...

  4. 导出word文档

    string id = Request["id"];            if (string.IsNullOrEmpty(id))            {           ...

  5. ORA-14450

    ORA-14450 attempt to access a transactional temp table already in use Cause: An attempt was made to ...

  6. 1203.4——循环语句 之 for

    for循环的一般形式为:for(表达式1; 表达式2; 表达式3){    语句块} 它的执行过程如下:1) 先求解表达式1. 2) 求解表达式2,若其值为真(非0),则执行循环体,否则结束循环. 3 ...

  7. Python学习笔记2(控制语句)

    1.if条件语句 if(表达式): 语句1 else: 语句2 2.if...elif...else判断语句 if(表达式1):语句1 elif(表达式2):语句2 ... elif(表达式n):语句 ...

  8. LinearLayout的一些注意事项

    1.orientation的默认值为horizontal,即从左向右排列.由于一般从上向下排列,所以必须指定orientation属性. 2.layout_gravity与gravity的区别: (1 ...

  9. 配置chrome支持本地(file协议)ajax请求

    将html代码拖拽进入chrome通过file协议浏览时,发送的ajax请求本地文件,会报跨域错误. XMLHttpRequest cannot load file:///E:/webs/extJS/ ...

  10. python运维开发(二十)----models操作、中间件、缓存、信号、分页

    内容目录 select Form标签数据库操作 models操作F/Q models多对多表操作 Django中间件 缓存 信号 分页 select Form标签补充 在上一节中我们可以知道Form标 ...