以下例子是使用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. (转)Apache+Tomcat集群配置

    本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...

  2. ASP.Net请求处理机制初步探索之旅 - Part 1 前奏(转)

        在读本文之前建议先阅读IIS架构:http://www.cnblogs.com/tiantianle/p/5079932.html     不管是ASP.Net WebForm还是ASP.Ne ...

  3. angular的数据双向绑定秘密

    Angular用户都想知道数据绑定是怎么实现的.你可能会看到各种各样的词汇:$watch,$apply,$digest,dirty-checking... 它们是什么?它们是如何工作的呢?这里我想回答 ...

  4. Android Eclipse Errors

    1.The import org.apache.http.client; tip: cannot be resolved; resolve: Find library in your sdk and ...

  5. UNION ALL

    select field1,field2,field3,field4 from table1 where ... UNION ALL select field1,field2,field3,field ...

  6. (转)swfobject.js 详细解说

    一直想对这个应用做个总结,今天偶然百度到这个效果,为此做个笔记. 用这个js的好处: 1.IE中没有讨厌的虚框问题了.2.提供了完善的版本检测功能,如果版本不够则显示其他东西,比如图片或文字.3.易于 ...

  7. java合并list

    import java.util.ArrayList; import java.util.List;   import com.google.common.collect.Lists;   priva ...

  8. 关于UIWebview的属性的介绍

    /*    ViewController.h 文件               */ #import <UIKit/UIKit.h> @interface ViewController : ...

  9. iOS系统相册的有关操作

    iOS中,我们选择相册中的资源和调用摄像头可以使用 :UIImagePickerController类来完成,不使用UI我们可以通过:ALAssetsLibrary类来使用相册资源. 一. ALAss ...

  10. php静态属性和静态方法

    php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. · ...