Spring提供了发送电子邮件的功能,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。

Spring的邮件服务支持主要是通过JavaMailSender这个接口实现的:

public   interface  JavaMailSender  extends  MailSender {

MimeMessage createMimeMessage();

MimeMessage createMimeMessage(InputStream contentStream)  throws  MailException;

void  send(MimeMessage mimeMessage)  throws  MailException;

void  send(MimeMessage[] mimeMessages)  throws  MailException;

void  send(MimeMessagePreparator mimeMessagePreparator)  throws  MailException;

void  send(MimeMessagePreparator[] mimeMessagePreparators)  throws  MailException;

}

这是JavaMailSender的接口源代码(去除注释),可以看到,主要提供了createMimeMessage和send两个方法。createMimeMessage方法主要是用来创建JavaMail的MIME信件,而send则是发送电子邮件的主要方法。

Spring中提供了JavaMailSender的简单实现:org.springframework.mail.javamail.JavaMailSenderImpl。在JavaMailSendImpl这个类中,实现了JavaMailSender中定义的方法的具体实现。而众所周知,Spring是核心的功能是IOC,所以通过Spring来发送电子邮件,就可以使用Spring强大的IOC功能,下面就来看一下,怎么样在Spring中发送邮件:

1. Spring配置文件,主要配置mailSender和对velocity的支持

<? xml version="1.0" encoding="UTF-8" ?>

< beans  xmlns ="http://www.springframework.org/schema/beans"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"

default-lazy-init ="true"  default-autowire ="byName" >

<!--  属性文件加载, 加载邮件设置属性文件  -->

< bean  id ="propertyConfigurer"

class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >

< property  name ="locations" >

< list >

< value > classpath:mail.properties </ value >

</ list >

</ property >

</ bean >

< bean  id ="mailEngine"  class ="org.example.mailer.MailEngine" >

< property  name ="javaMailSender"  ref ="javaMailSender"   />

< property  name ="velocityEngine"  ref ="velocityEngine"   />

</ bean >

< bean  id ="velocityEngine"

class ="org.springframework.ui.velocity.VelocityEngineFactoryBean" >

< property  name ="resourceLoaderPath"  value ="classpath:velocity"   />

</ bean >

<!--  邮件发送器  -->

< bean  id ="javaMailSender"  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 >

</ props >

</ property >

</ bean >

</ beans >

在这个配置文件中,通过 propertyConfigurer这个bean 加载了邮件的配置文件:mail.properties,这个文件主要定义一些邮件服务的属性(使用的时候根据自己的要求进行相应的配置,这里以126的smtp服务为例):

mail.from =

mail.host = smtp. 126 .com

mail.username =

mail.password =

mail.smtp.auth = true

mail.smtp.timeout = 25000

下面来看一下MailEngine 的实现:

package  org.example.mailer;

import  java.util.Map;

import  javax.mail.MessagingException;

import  javax.mail.internet.MimeMessage;

import  org.apache.commons.logging.Log;

import  org.apache.commons.logging.LogFactory;

import  org.apache.velocity.app.VelocityEngine;

import  org.apache.velocity.exception.VelocityException;

import  org.springframework.beans.factory.BeanFactory;

import  org.springframework.context.support.ClassPathXmlApplicationContext;

import  org.springframework.mail.MailException;

import  org.springframework.mail.javamail.JavaMailSender;

import  org.springframework.mail.javamail.MimeMessageHelper;

import  org.springframework.ui.velocity.VelocityEngineUtils;

public   class  MailEngine {

protected   final  Log logger  =  LogFactory.getLog(getClass());

private  JavaMailSender javaMailSender;

private  VelocityEngine velocityEngine;

public   void  setJavaMailSender(JavaMailSender javaMailSender) {

this .javaMailSender  =  javaMailSender;

}

public   void  setVelocityEngine(VelocityEngine velocityEngine) {

this .velocityEngine  =  velocityEngine;

}

public   void  sendMailWithVelocity() {

MimeMessage msg  =  javaMailSender.createMimeMessage();

MimeMessageHelper helper  =   new  MimeMessageHelper(msg);

String result  =   null ;

Map model  =   null ;

try  {

result  =  VelocityEngineUtils.mergeTemplateIntoString(

velocityEngine,  " sendMail.vm " ,  " UTF-8 " , model); // UTF-8为模板文件的字符编码

helper.setFrom( " 邮件发送者 " );

helper.setSubject( " 测试Spring邮件 " );

helper.setTo( " 邮件接收者 " );

helper.setText(result);

javaMailSender.send(msg);

}  catch  (VelocityException e) {

e.printStackTrace();

logger.error(e.getMessage());

}  catch  (MessagingException e) {

//  TODO Auto-generated catch block

e.printStackTrace();

}

}

public   boolean  senaMail() {

MimeMessage msg  =  javaMailSender.createMimeMessage();

MimeMessageHelper helper  =   new  MimeMessageHelper(msg);

try  {

helper.setFrom( " 邮件发送者 " );

helper.setSubject( " 邮件内容 " );

helper.setTo( " 邮件接收者 " );

helper.setText( " test spring mailer " ,  true );  //  如果发的不是html内容去掉true参数

javaMailSender.send(msg);

}  catch  (MessagingException e) {

//  TODO 自动生成 catch 块

if  (logger.isWarnEnabled()) {

logger.warn( " 邮件信息导常! 邮件标题为:  " );

}

return   false ;

//  e.printStackTrace();

}  catch  (MailException me) {

//  TODO: handle exception

if  (logger.isWarnEnabled()) {

logger.warn( " 发送邮件失败! 邮件标题为:  " );

}

return   false ;

}

return   true ;

}

public   static   void  main(String[] args) {

BeanFactory bf  =   new  ClassPathXmlApplicationContext( " beans.xml " );

MailEngine mailEngine  =  (MailEngine) bf.getBean( " mailEngine " );

//  mailEngine.senaMail();

mailEngine.sendMailWithVelocity();

}

}

sendMailWithVelocity方法主要是使用Velocity模板文件来发送邮件,Velocity模板文件定义了邮件的内容,模板文件的位置由 resourceLoaderPath 指定,本例则在classpath下的velocity下,如果是web项目,则位于/WEB-INF/classes/veloticy/目录下。

执行main方法,就可以发送邮件了。

Spring发送电子邮件的更多相关文章

  1. Spring通过Gmail SMTP服务器MailSender发送电子邮件

    Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...

  2. 使用Spring发送带附件的电子邮件(站内和站外传送)

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  3. 关于使用 Spring 发送简单邮件

    这是通过Spring 框架内置的功能完成简单邮件发送的测试用例. 导入相关的 jar 包. Spring 邮件抽象层的主要包为 org.springframework.mail. 它包括了发送电子邮件 ...

  4. Spring发送带附件邮件

    下面是一个例子使用Spring通过Gmail SMTP服务器来发送电子邮件附件.为了包含附件的电子邮件,你必须使用 Spring的JavaMailSender及MimeMessage 来代替 Mail ...

  5. JAVA实现发送电子邮件

    相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...

  6. 使用Spring 发送 Email !!!!

    邮件服务器: 邮件服务器提供了邮件系统的基本结构,包括邮件传输,邮件分发,邮件存储等功能,以确保邮件能够发送到互联网中的任意地方. 邮件服务器就像我们生活中的邮局,为人们提供邮件服务.要保证邮件被正确 ...

  7. WordPress ”无法发送电子邮件,可能原因:您的主机禁用了mail()函数“的解决办法

    WordPress网站中出现 "无法发送电子邮件,可能原因:您的主机禁用了mail()函数"的情况一般都是因为所在主机环境不支持在线邮件收发功能导致,如果不支持的话,那么像类似 N ...

  8. javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)

    引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...

  9. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

随机推荐

  1. 播放器音乐源之天天动听API

    搜索歌曲API:http://so.ard.iyyin.com/s/song_with_out?q={0}&page={1}&size={2} {0}=需要搜索的歌曲或歌手 {1}=查 ...

  2. Android 上传库到Binary的操作

    第一次,按照网上教程配置需要的配置文件,上传成功 1.0版本. 以后更新的时候 输入 : install ,执行task 然后再输入:bintrayUpload ,执行task,看下面控制台输出信息, ...

  3. XML新手入门 创建构造良好的XML(2)

    本文描述了构建良好的XML需要遵循的规则.作者详细介绍了构建XML需要考虑的元素,如何命名约定.正确的标记嵌套.属性规则.声明和实体,以及DTD和schema的验证,十分便于新手开始学习了解XML. ...

  4. C函数指针简单用例

    (1)函数指针:可以指向 一类 固定形参类型和返回值类型 的函数 的指针声明:int fun(int, int)    ||    \/int (*pfun)(int, int) pfun就是函数指针 ...

  5. GDAL库学习笔记(1):无缝拼接Google卫星图

    开工之前要先了解一下瓦片地图,瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变.实现原理就是,首先确定地图服务平台所要提供的缩放级别的数量N,把 ...

  6. Amazon 解决下载文件乱码

    大家在做多个站点的时候,可能会遇到下载下来的报告文件出现乱码. 法国站点和意大利站点均会出现这样的情况,那怎么解决呢? 这是由于编码的问题而导致,在我们读取数据插入到本地数据库的时候,不妨先将格式转成 ...

  7. WAS

    http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Fin ...

  8. 最核心4大NFC技术规范详解

    1998年,飞利浦.索尼和诺基亚创建了 NFC论坛,宗旨是推动NFC的发展普及和规范化.论坛至今共推出了5大类技术规范:协议技术规范(Protocol Technical Specification) ...

  9. STL set 使用小结

    这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类 ...

  10. 学习笔记之--java EE 环境的搭建

    一.前期准备.(apache-maven-3.0.5.apache-tomcat-7.0.23-windows-x86.eclipse-jee-kepler-SR1-win32.jdk-7u45-wi ...