`
woshixushigang
  • 浏览: 579820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

spring 发邮件

 
阅读更多

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方法,就可以发送邮件了。

转自:http://rainlife.iteye.com/blog/417973

分享到:
评论

相关推荐

    Spring邮件发送源码

    首先,让我们来了解如何配置Spring邮件服务。在Spring的配置文件(如`applicationContext.xml`)中,我们需要定义一个`JavaMailSender` bean。这个bean通常会包含SMTP服务器的信息,如主机名、端口号、用户名和密码...

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

    总之,这个实例结合了Struts2、Spring和Mybatis的强大功能,提供了一个完整的邮件发送系统,包括邮件的创建、附件上传和数据库操作。对这个实例的学习和实践,可以帮助开发者深入理解Java企业级应用的开发流程和技巧...

    spring集成邮件服务

    而Spring集成邮件服务则是一个常见的需求,特别是对于那些需要发送确认邮件、通知或者报告的应用来说。下面将详细阐述Spring如何与JavaMail API结合,实现邮件服务的集成。 首先,我们需要理解JavaMail API。...

    spring各种邮件发送

    在"spring各种邮件发送"这个主题中,我们将探讨Spring框架如何帮助开发者实现电子邮件的发送。邮件服务在许多应用场景中都十分常见,例如用户注册确认、密码重置提醒等。 首先,Spring框架提供了`JavaMailSender`...

    spring中邮件及定时任务

    在Spring框架中,邮件服务和定时任务是两个非常重要的功能扩展。邮件服务允许开发者向用户发送电子邮件,而定时任务则可以实现程序的自动化执行,如数据同步、报表生成等。以下将详细介绍这两个方面。 首先,我们来...

    java发送邮件 spring发送邮件

    Java发送邮件是软件开发中常见的功能,Spring框架提供了一种优雅的方式来实现这一需求。Spring框架以其模块化和灵活性而著名,它包含了一个名为`JavaMailSender`的接口,专门用于处理电子邮件的发送。在这个场景中,...

    Spring 使用163发邮件带附件

    压缩文件名"Spring08MailSpring2"可能表示这是一个关于Spring邮件发送的系列教程的第八部分,或者可能是某个特定版本的示例代码。如果文件中包含源码,你可以期待找到一个完整的配置示例,以及如何创建和发送带附件...

    Spring Boot整合邮件发送并保存历史发送邮箱

    Spring Boot整合邮件发送并保存历史发送邮箱 项目描述 项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件...

    java 发送邮件 spring发送邮件Mail

    Spring框架提供了一种优雅的方式来处理这个任务,它整合了JavaMailSender接口和JavaMail API,使得在Java应用程序中发送邮件变得更加简单。让我们深入探讨这个主题。 首先,JavaMail API是Java用来处理邮件收发的...

    spring发送邮件demo

    在Spring中,发送电子邮件的功能是通过Spring的Mail API实现的,这在系统监控、报警通知、用户验证等场景中非常常见。下面将详细介绍如何使用Spring发送邮件。 首先,我们需要在项目中引入Spring的邮件支持。这通常...

    Spring mvc 发送邮件功能

    在Spring MVC框架中,实现邮件发送功能通常涉及配置Spring的JavaMailSender接口和使用模板引擎如FreeMarker来创建动态邮件内容。以下是一个详细的步骤指南: 1. **依赖库**: - `javax.mail`:这是Java邮件API的...

    Spring 使用163发邮件

    本主题将深入探讨如何使用Spring框架发送电子邮件,特别是通过163邮箱服务进行邮件发送。首先,我们需要理解Spring的JavaMailSender接口,它是Spring提供用来发送电子邮件的核心组件。 1. **JavaMailSender接口**:...

    struts spring 实现简单的邮件发送

    邮件服务类中的方法可以接收邮件的发件人、收件人、主题和内容作为参数,然后调用JavaMailSender的send方法发送邮件。 3. **Struts2整合**:在Struts2的配置文件(struts.xml)中,定义一个Action类,该类会调用...

    spring velocity 发邮件(单发,群发,图片,附件)

    1. **Spring邮件服务**: Spring框架提供了`JavaMailSender`接口和`SimpleMailMessage`类,使得开发者能够方便地发送电子邮件。`JavaMailSender`接口提供了发送邮件的基本方法,而`SimpleMailMessage`可以用来构建...

    SpringMail发邮件

    SpringMail是Spring框架的一个扩展,它为Java应用提供了一个简单且强大的邮件发送功能。通过集成SpringMail,开发者可以轻松地在应用程序中实现电子邮件的发送,无论是普通的文本邮件、HTML格式的邮件,还是带有附件...

    spring发送邮件所需jar包

    以下是一些核心的JAR包及其在Spring邮件发送中的作用: 1. **spring-context**: 这是Spring框架的核心模块,包含环境感知、依赖注入(DI)、事件传播、AOP代理等核心功能。在邮件发送中,它提供了一个`MailSender...

    Spring邮件发送

    **Spring邮件发送** 在Java开发中,Spring框架提供了一种简单而强大的方式来发送电子邮件。Spring的`JavaMailSender`接口以及其实现类`SimpleMailMessage`和`MailMessage`,使得开发者能够轻松地集成邮件服务到应用...

    springboot 整合spring-boot-starter-mail 发邮件.rar

    springboot 整合spring-boot-starter-mail 发邮件

Global site tag (gtag.js) - Google Analytics