`

spring+velocity+javamail发送模板邮件

阅读更多
有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢?
就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了。
先看代码
package com.worthtech.app.util;

import java.io.File;
import java.util.Map;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.velocity.app.VelocityEngine;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.velocity.VelocityEngineUtils;

public class MailSenderService {
	private JavaMailSender mailSender;//spring配置中定义
	private VelocityEngine velocityEngine;//spring配置中定义
	private SimpleMailMessage simpleMailMessage;//spring配置中定义
	private String from;
	private String to;
	private String subject;
	private String content;
	private String templateName;
	// 是否需要身份验证   
	private boolean validate = false; 
	
	
	public JavaMailSender getMailSender() {
		return mailSender;
	}
	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}
	public VelocityEngine getVelocityEngine() {
		return velocityEngine;
	}
	public void setVelocityEngine(VelocityEngine velocityEngine) {
		this.velocityEngine = velocityEngine;
	}
	/**
	 * 发送模板邮件
	 *
	 */
	public void sendWithTemplate(Map model){
		mailSender = this.getMailSender();
		simpleMailMessage.setTo(this.getTo()); //接收人  
		simpleMailMessage.setFrom(simpleMailMessage.getFrom()); //发送人,从配置文件中取得
		simpleMailMessage.setSubject(this.getSubject());
        String result = null;
        try {
        	result = VelocityEngineUtils.mergeTemplateIntoString(this.getVelocityEngine(), this.getTemplateName(), "UTF-8",model);
		} catch (Exception e) {}
		simpleMailMessage.setText(result);
        mailSender.send(simpleMailMessage);
	}
	/**
	 * 发送普通文本邮件
	 *
	 */
	public void sendText(){
		mailSender = this.getMailSender();
		simpleMailMessage.setTo(this.getTo()); //接收人  
		simpleMailMessage.setFrom(simpleMailMessage.getFrom()); //发送人,从配置文件中取得
		simpleMailMessage.setSubject(this.getSubject());
		simpleMailMessage.setText(this.getContent());
	    mailSender.send(simpleMailMessage);
	}
	/**
	 * 发送普通Html邮件
	 *
	 */
	public void sendHtml(){
		mailSender = this.getMailSender();
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
		try {
			messageHelper.setTo(this.getTo());
			messageHelper.setFrom(simpleMailMessage.getFrom());
			messageHelper.setSubject(this.getSubject());
			messageHelper.setText(this.getContent(),true);      
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    mailSender.send(mimeMessage);
	}
	/**
	 * 发送普通带一张图片的Html邮件
	 *
	 */
	public void sendHtmlWithImage(String imagePath){
		mailSender = this.getMailSender();
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
			messageHelper.setTo(this.getTo());
			messageHelper.setFrom(simpleMailMessage.getFrom());
			messageHelper.setSubject(this.getSubject());
			messageHelper.setText(this.getContent(),true);
//			Content="<html><head></head><body><img src=\"cid:image\"/></body></html>";
			//图片必须这样子:<img src='cid:image'/>
			FileSystemResource img = new FileSystemResource(new File(imagePath));
			messageHelper.addInline("image",img);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    mailSender.send(mimeMessage);
	}
	/**
	 * 发送普通带附件的Html邮件
	 *
	 */
	public void sendHtmlWithAttachment(String filePath){
		mailSender = this.getMailSender();
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
			messageHelper.setTo(this.getTo());
			messageHelper.setFrom(simpleMailMessage.getFrom());
			messageHelper.setSubject(this.getSubject());
			messageHelper.setText(this.getContent(),true);
			FileSystemResource file = new FileSystemResource(new File(filePath));
//			System.out.println("file.getFilename==="+file.getFilename());
			messageHelper.addAttachment(file.getFilename(),file);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    mailSender.send(mimeMessage);
	}
	public String getFrom() {
		return from;
	}
	public void setFrom(String from) {
		this.from = from;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getTo() {
		return to;
	}
	public void setTo(String to) {
		this.to = to;
	}
	public String getTemplateName() {
		return templateName;
	}
	public void setTemplateName(String templateName) {
		this.templateName = templateName;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public boolean isValidate() {
		return validate;
	}
	public void setValidate(boolean validate) {
		this.validate = validate;
	}
	public SimpleMailMessage getSimpleMailMessage() {
		return simpleMailMessage;
	}
	public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
		this.simpleMailMessage = simpleMailMessage;
	}
}


上面这个类实际上是个发送邮件的工具类,我们只要设置好参数后调用想要的sendXXX()就可以了。如下:
//注册完马上发送邮件
MailSenderService mailSender=this.getMailsenderService();
mailSender.setTo(form.getEmail());
mailSender.setSubject("来自worthtech的邮件");
mailSender.setTemplateName("mail.vm");//设置的邮件模板
Map model=new HashMap();
model.put("username", form.getUserName());
String url=request.getRequestURL().toString();
url=url.substring(0, url.lastIndexOf("/"));
model.put("url", url);
model.put("email", "gjni@worthtech.net");
mailSender.sendWithTemplate(model);
System.out.println("邮件发送成功!");

下面的是spring配置
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
       <property name="host" value="${mail.host}"/>
       <property name="username" value="${mail.username}"/>
       <property name="password" value="${mail.password}"/>
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="javaMailProperties">
             <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
                <!--
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.socketFactory.fallback">false</prop>
                -->
            </props>
        </property>
  </bean>
  <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage" singleton="false">
    <property name="from">
        <value>${mail.default.from}</value>
    </property>
  </bean>
  <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">   
            <props>   
                <prop key="resource.loader">class</prop>   
                <prop key="class.resource.loader.class">   
                    org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader   
                </prop>   
                <prop key="velocimacro.library"></prop>   
            </props>   
        </property>   
   </bean>
	<bean id="mailsenderService" class="com.worthtech.app.util.MailSenderService">  
	      <property name="mailSender" ref="mailSender" />
	      <property name="simpleMailMessage" ref="simpleMailMessage" />
	      <property name="velocityEngine" ref="velocityEngine" />
	</bean>


mail.vm内容如下:
亲爱的${username}

欢迎加入worthtech! 

当您收到这封信的时候,您已经可以正常登录了。
请点击链接登录首页:${url}
如果您的email程序不支持链接点击,请将上面的地址拷贝至您的浏览器(如IE)的地址栏进入。

如果您还想申请管理员权限,可以联系管理员${email}

我们对您产生的不便,深表歉意。

希望您在worthtech度过快乐的时光!
    
-----------------------
     
(这是一封自动产生的email,请勿回复。)


mail.properties如下:
mail.host=218.000.000.234
mail.port=25
mail.username=gjni@worthtech.net
mail.password=xxxxxxxx
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.default.from=gjni@worthtech.net
分享到:
评论
1 楼 直觉 2013-08-04  
配置文件中没看到引进 mail.properties 文件啊?

相关推荐

    spring+velocity发送邮件

    在本场景中,我们将利用Spring来管理JavaMail Sender对象,以便于发送邮件。 #### Velocity模板引擎 Velocity是一个基于Java的模板引擎,它允许开发者通过简单的模板语言来生成HTML网页、XML数据或者普通的文本。在...

    简单学习使用Spring+Velocity发送邮件

    这样,当发送邮件时,Spring会使用这些模板并替换变量,生成最终的邮件内容。 为了在Spring中集成Velocity,我们需要添加以下依赖: 1. `velocity-engine-core`:Velocity的核心库。 2. `velocity-tools-view`:...

    struts2+spring3.0+mybatis3.0.4集成的邮件发送实例(可上传附件)

    在这个实例中,我们可能有一个名为`SendMailAction`的类,该类中包含了发送邮件的相关逻辑。Struts2配置文件(`struts.xml`)需要进行相应的配置,以映射HTTP请求到这个Action。 Spring3.0则扮演了服务层的角色,它...

    spring+sendmail+模板+properties+vm

    而“spring+sendmail+模板+properties+vm”这一主题则涉及到Spring框架中关于电子邮件发送以及使用模板和配置文件的部分。以下是这些知识点的详细说明: 1. **Spring Sendmail**: Spring框架提供了`JavaMailSender`...

    Spring中使用FreeMaker或Vilocity模板发送邮件

    在Spring框架中,我们经常需要实现发送邮件的功能,这通常涉及到使用模板来生成动态内容,以便提供更加个性化和丰富的邮件信息。FreeMarker和Velocity是两个常见的Java模板引擎,它们可以帮助我们将后端数据与HTML...

    Spring进阶—如何用Java代码实现邮件发送

    JavaMail API是Java中用于发送邮件的基础库,虽然它可以完成邮件发送,但其API接口相对复杂,编写代码时需要处理较多细节。Apache Commons Email库则提供了一种更简洁的方式来发送邮件,它简化了邮件构造和发送的...

    spring mail

    2. Session:JavaMail API中的Session对象是发送邮件的核心,它包含了邮件服务器的相关配置信息。 3. Message:Message对象代表一封邮件,包含了邮件的主题、正文、附件等信息。 4. Transport:Transport类负责将...

    java发送邮件所需jar包

    比如,你可以使用`org.springframework.mail.javamail.JavaMailSender`接口来发送邮件,它简化了邮件的构造和发送过程。同时,Spring还支持使用模板引擎(如FreeMarker或Velocity)来动态生成邮件内容。 使用这两个...

    JAVA邮件发送系统项目

    - **定时任务**:如果需要定期发送邮件,可以结合Quartz或Spring的定时任务功能。 - **邮件验证**:在用户注册或更改重要设置时,发送验证邮件以提高安全性。 - **邮件队列**:对于大量发送的邮件,可以考虑使用...

    使用Spring的JAVA Mail支持简化邮件发送功能

    Spring的核心邮件发送接口是`MailSender`,而在Spring 3.0及以后的版本中,提供了一个实现类`JavaMailSenderImpl`,它是发送邮件的主要工具。你可以通过配置文件来定义这个bean,或者直接在代码中实例化它。 ```...

    在Java中发送电子邮件

    首先,JavaMail API是Java中发送邮件的核心库,这里有两个版本的库文件:javax.mail-1.5.1.jar和javax.mail.jar。这两个版本都提供了处理SMTP(简单邮件传输协议)和其他邮件协议的功能。在使用JavaMail API时,我们...

    jsp邮件群发系统jsp邮件群发系统

    开发过程中可能还会用到其他Java库,如Apache Commons Net用于SMTP通信,Velocity或Freemarker作为模板引擎,Spring框架进行依赖注入和事务管理。 【压缩包子文件的文件名称列表】中的"email"可能包含以下组件: 1...

    java邮件

    - 发送邮件:使用`Transport`类的`send()`方法发送邮件。 2. **SMTP协议与ESMTP** - SMTP(Simple Mail Transfer Protocol)是用于在互联网上传输邮件的标准协议。JavaMail API支持ESMTP(Extended SMTP),提供...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.4.3. 创建模板 14.4.4. 高级配置 14.4.4.1. velocity.properties 14.4.4.2. FreeMarker 14.4.5. 绑定支持和表单处理 14.4.5.1. 用于绑定的宏 14.4.5.2. 简单绑定 14.4.5.3. 表单输入生成宏 14.4.5.4. 重载HTML...

    SPRING各实用开发包用途及解释

    该库为第三方工具提供了支持,如缓存(ehcache)、连接管理(JCA)、监控管理(JMX)、邮件发送(JavaMail/COS Mail)、定时任务调度(Timer/Quartz)等。 ##### (11) spring-web.jar 此库提供了Spring Web的支持,...

    SpringBoot配置Email发送功能实例

    spring-boot-starter-mail提供了Email发送功能,而spring-boot-starter-velocity提供了模板引擎velocity的支持。 三、 配置Email发送功能实例 要配置Email发送功能实例,需要在application.properties文件中添加...

    Spring 2.0 开发参考手册

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...

    SSH实现的商城项目

    此外,安全方面可能有Spring Security或Apache Shiro进行权限控制,邮件服务可能通过JavaMail发送订单确认邮件,日志管理可能使用Log4j或SLF4J。 总的来说,SSH实现的商城项目展示了Java Web开发的全貌,从用户界面...

    email-service

    在IT领域,电邮服务是系统间通信、用户通知或批量发送邮件的重要组成部分。本项目的核心目标是实现高效、稳定且可扩展的邮件服务。 首先,我们可以从项目名"email-service-master"推测,这是一个主分支或者完整的...

Global site tag (gtag.js) - Google Analytics