`
rainlife
  • 浏览: 233432 次
  • 性别: 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方法,就可以发送邮件了。

分享到:
评论

相关推荐

    java发送邮件 spring发送邮件

    Spring框架以其模块化和灵活性而著名,它包含了一个名为`JavaMailSender`的接口,专门用于处理电子邮件的发送。在这个场景中,我们将深入探讨如何使用Spring框架发送邮件,以及涉及到的相关知识点。 首先,我们需要...

    spring发送邮件demo

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

    java 发送邮件 spring发送邮件Mail

    Java发送邮件是软件开发中常见的需求,特别是在企业级应用中,用于发送通知、报表或验证用户的电子邮件地址。Spring框架提供了一种优雅的方式来处理这个任务,它整合了JavaMailSender接口和JavaMail API,使得在Java...

    spring各种邮件发送

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

    spring JavaMailSenderImpl 发送邮件 java

    其中,Spring的JavaMailSenderImpl是用于发送电子邮件的一个重要工具,它使得开发者能够方便地集成邮件服务到他们的应用中。下面将详细介绍这个知识点。 **1. Spring的JavaMailSender接口与JavaMailSenderImpl实现*...

    Spring发送Email

    本文将深入探讨如何使用Spring发送电子邮件。 首先,我们需要了解Spring Mail的基本概念。Spring Mail是Spring框架的一个扩展,它基于JavaMail API,用于处理邮件发送任务。JavaMail API是Java中用于处理邮件的规范...

    Spring mvc 发送邮件功能

    在Spring MVC框架中,实现邮件发送功能通常涉及配置Spring的JavaMailSender接口和使用模板引擎如FreeMarker来创建动态邮件内容。以下是一个详细的步骤...这将使你的应用程序能够高效、灵活地发送各种类型的电子邮件。

    Spring发送邮件

    在Java编程领域,Spring框架是广泛应用的开源框架,它提供了许多功能,其中之一就是发送电子邮件。SpringMail是Spring框架的一个扩展,专门用于简化邮件发送过程。本文将深入探讨如何使用SpringMail来实现邮件发送...

    使用Spring Boot 开发支持多附件邮件发送微服务平台代码

    这个模块提供了发送电子邮件的能力,包括HTML内容、文本内容以及附件。在项目中,你需要在`pom.xml`或`build.gradle`文件中添加该依赖。 ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-...

    spring mail通过代理发送邮件

    标题中的“spring mail通过代理发送邮件”涉及到的是Spring框架中处理电子邮件发送的功能,尤其是在网络环境有限制或需要通过代理服务器的情况下。Spring Mail是Spring Framework的一个扩展模块,它提供了与JavaMail...

    Spring邮件发送

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

    Spring mail发送邮件实例

    Spring Mail 是 Spring 框架中用于处理电子邮件发送的一个模块。它提供了一种简单的方式来进行邮件的发送,支持多种邮件发送协议,例如 SMTP 等,并且可以很好地与其他 Spring 组件集成。 #### 二、准备工作 在...

    Spring 使用163发邮件带附件

    标题 "Spring 使用163发邮件带附件" 涉及到的是在Java开发中,使用Spring框架发送电子邮件,特别是包含附件的邮件。这通常在系统需要自动化通知、报告发送或者用户验证过程中非常常见。Spring提供了JavaMailSender...

    Spring邮件发送服务(java邮件发送)

    在Java开发中,Spring框架提供了一种方便的方式来发送电子邮件,这就是SpringMail模块。SpringMail使得在应用程序中集成邮件服务变得更加简单,它支持多种功能,包括发送带有多个附件、多接收者(包括抄送和暗送)的...

    Spring Email 发送

    本示例将深入探讨如何使用Spring发送电子邮件,特别是针对中文乱码问题的解决方案。我们将涉及Spring的Java配置和Velocity模板引擎来创建动态邮件内容。 首先,我们需要引入必要的依赖。在Spring项目中,我们通常会...

    spring集成邮件服务

    JavaMail是一个开源库,它允许Java应用程序发送和接收电子邮件。它提供了一系列接口和类,用于操作邮件服务器,包括SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(Internet消息访问协议)。 Spring框架通过`...

    使用springMail发送带附件的email

    SpringMail是一个在Java应用中发送电子邮件的库,它利用了JavaMail API的简便性和灵活性。在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail ...

    Spring Boot整合JavaMailSender发送电子邮件

    Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。

Global site tag (gtag.js) - Google Analytics