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发送电子邮件的更多相关文章
- Spring通过Gmail SMTP服务器MailSender发送电子邮件
Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...
- 使用Spring发送带附件的电子邮件(站内和站外传送)
JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输. 虽然JavaMail是 ...
- 关于使用 Spring 发送简单邮件
这是通过Spring 框架内置的功能完成简单邮件发送的测试用例. 导入相关的 jar 包. Spring 邮件抽象层的主要包为 org.springframework.mail. 它包括了发送电子邮件 ...
- Spring发送带附件邮件
下面是一个例子使用Spring通过Gmail SMTP服务器来发送电子邮件附件.为了包含附件的电子邮件,你必须使用 Spring的JavaMailSender及MimeMessage 来代替 Mail ...
- JAVA实现发送电子邮件
相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...
- 使用Spring 发送 Email !!!!
邮件服务器: 邮件服务器提供了邮件系统的基本结构,包括邮件传输,邮件分发,邮件存储等功能,以确保邮件能够发送到互联网中的任意地方. 邮件服务器就像我们生活中的邮局,为人们提供邮件服务.要保证邮件被正确 ...
- WordPress ”无法发送电子邮件,可能原因:您的主机禁用了mail()函数“的解决办法
WordPress网站中出现 "无法发送电子邮件,可能原因:您的主机禁用了mail()函数"的情况一般都是因为所在主机环境不支持在线邮件收发功能导致,如果不支持的话,那么像类似 N ...
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
随机推荐
- C的xml编程-libxml2(转)
这里主要讲述libxml2在linux下的使用. (以下内容除了linux下的安装步骤是自己写的,其余均出自http://www.blogjava.net/wxb_nudt/archive/2007/ ...
- Windows Server 2008 R2 IIS重装
背景描述: 在一个刚睡醒午觉后的下午,忽然收到客户反馈,说昨天开始应用特别卡,各种卡各种不好用,忽然想到上次说要优化服务器IIS配置还一直没弄,然后迷迷糊糊的就开始进行客户现场服务器IIS配置优化,涉 ...
- HTML5 自定义属性 data-*介绍
在HTML5之前HTML4我们也可以自定义属性通过setAttribute去设置或者直接写在HTML标签里面那么HTML5新增data-*(*可以替换成你喜欢的任意名字)属性有什么用呢? 更便的捷操作 ...
- 工具使用 eclipse the user operation is waiting for Building Working to be completed。
问题定位: 在使用 IDE开发时,学习一个新事物如语言,框架,出现错误时暂时无法判断是新写的代码错还是IDE使用错: 则编写简单的未使用该技术的test.java ,运行后还有异常出现,则不是代码问题 ...
- MySQL数据库改名字
在这里首先感谢那个网上已经给出了解决办法的同志 有很多MySQL数据库的初学者可能都会遇到一个关于改名字的问题,可能大家第一时间就会想到去网上搜搜,其实我跟大家的心理是一样的(呵呵). 据我所知,My ...
- 我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言
我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 2015-08-06 猿圈 我用爬虫一天时间“偷了”知乎一百万用户 只为证明PHP是世界上最好的语言 看了不少朋友圈里推荐的P ...
- Jumpserver
Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent. 支持常见系统: redhat centos debi ...
- laravel artisan 命令工具
//全局相关 php artisan:显示详细的命令行帮助信息,同 php artisan list php artisan –help:显示帮助命令的使用格式,同 php artisan help ...
- 使用PHP自动部署GIT代码
最近在使用Coding的代码托管,顺便设置了WebHook自动部署,过程还是挺艰辛的,主要还是没搞懂Linux的权限控制,不过好在弄好了,分享一下获益最深的一篇文章,供大家参考,原文是英文版的,我的英 ...
- 定制化Azure站点Java运行环境(2)
Azure Website上发布Java web应用 在Azure站点上发布Java Web应用非常简单,可以使用git从源代码发布,也可以使用FTP/FTPs直接发布,本节介绍FTP方式. 准备好你 ...