`
mengqingyu
  • 浏览: 333865 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Spring邮件发送(可带附件,模板,群发,异步发送等功能)

阅读更多
以下是我对spring发送邮件的总结:
分别使用了两种方法:单例模式和属性全注入的方法。
发送模式又分为:单发,群发。
可发送:text,html模板,附件等。
1、单例模式(单发,群发text)
在classpath底下新建application-mail.xml,内容如下:
Xml代码:
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:aop="http://www.springframework.org/schema/aop"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
    <!-- 注意:这里的参数(如用户名、密码)都是针对邮件发送者的 -->  
    <bean id="mailSender"  
  class="org.springframework.mail.javamail.JavaMailSenderImpl">  
        <property name="host">  
            <value>smtp.163.com</value>  
        </property>  
        <property name="javaMailProperties">  
            <props>  
                <prop key="mail.smtp.auth">true</prop>  
                <prop key="mail.smtp.timeout">25000</prop>  
            </props>  
        </property>  
        <property name="username">  
            <value>username@163.com</value>  
        </property>  
        <property name="password">  
            <value>password</value>  
        </property>  
    </bean>  
</beans>  

或者把以上的Beans配置到applicaiont.xml里面也可以。
发送text格式的Email类:
/
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;

public class EmailUtil {

	private static EmailUtil emailUtil = null;
	
	public ApplicationContext ctx = null; 
	
	private EmailUtil() {
		//获取上下文  		
		ctx = new ClassPathXmlApplicationContext("applicationContext-mail.xml");   
	}
	/**
	 * 
	 * @function:获得单例
	 */
	public static EmailUtil getInstance()
	{
		if(emailUtil==null)
		{
			synchronized (EmailUtil.class) 
			{
				if(emailUtil==null) {
					emailUtil = new EmailUtil();
				}
			}
		}
		return emailUtil;
	}

	public void sentEmails(String emails,String subject,String text)
	{			
		//获取JavaMailSender bean   
		JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");   
		//SimpleMailMessage只能用来发送text格式的邮件  
		SimpleMailMessage mail = new SimpleMailMessage(); 
		String email[] = emails.split(";");
		for(int i=0;i<email.length;i++) {
			try {   
				mail.setTo(email[i]);//接受者
   				mail.setFrom("username@163.com"); 
				mail.setSubject(subject);//主题   
				mail.setText(text);//邮件内容   
				sender.send(mail);   
			} catch (Exception e) {   
				e.printStackTrace();  
			}
		}
	}
	
	/**
	 * @function:测试邮件发送
	 */
	public static void main(String[] args) {	
		String	mail_title	= "注册成功";
		String	mail_content	= "恭喜!您已经注册成功.<BR>欢迎使用本网站,主页地址:<a href='http://www.baidu.com'/>";
	    EmailUtil email = EmailUtil.getInstance();   
	    email.sentEmails("username@163.com",mail_title,mail_content);
	}   
}

2.属性全注入的方法(单发,群发html模板)
FreeMarker是一个被广泛使用的模板框架,Spring可以很好的支持该框架。Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。下面以用户注册成功后发送的模板文件registerUser.ftl,${content}标签代表一个可被替换的动态属性。FreeMarker模板的标签支持级联属性,如${user.id}则表示user对象的id属性。在配置文件中已设置好模板目录,所以可在类中直接用模板文件名来定位模板文件。模板文件用UTF-8编码格式,避免中文乱码。通过设置template_update_delay属性,可让FreeMarker定期刷新模板,从而使应用程序在不重启下更新模板。
<html>  
   <head>  
      <meta http-equiv="content-type" content="text/html;charset=utf8">  
   </head>  
   <body>  
       恭喜您成功注册!您的用户名为:<font color='red' size='30'>${content}</font>  
   </body>  
</html>  

<?xml version="1.0" encoding="UTF-8"?>     
<beans xmlns="http://www.springframework.org/schema/beans"     
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
       xmlns:aop="http://www.springframework.org/schema/aop"     
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd      
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">     
    <!-- 注意:这里的参数(如用户名、密码)都是针对邮件发送者的 -->     
    <bean id="mailSender"     
  class="org.springframework.mail.javamail.JavaMailSenderImpl">     
        <property name="host">     
            <value>smtp.163.com</value>     
        </property>     
        <property name="javaMailProperties">     
            <props>     
                <prop key="mail.smtp.auth">true</prop>     
                <prop key="mail.smtp.timeout">25000</prop>     
            </props>     
        </property>     
        <property name="username">     
            <value>username@163.com</value>     
        </property>     
        <property name="password">     
            <value>password</value>     
        </property>     
    </bean>     
</beans>   
<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  <property name="templateLoaderPath" value="classpath:mailTemplate"/><!--指定模板文件目录-->    
  <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->    
      <props>  
          <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->    
          <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->  
          <prop key="locale">zh_CN</prop><!-- 本地化设置-->  
      </props>  
  </property>  
</bean>  
    <!-- ************************           Email Service配置         ********************************* -->
	 <bean id="emailService" class="EmailService">
		<property name="sender" ref="mailSender"></property> 
		<property name="freeMarkerConfigurer" ref="freeMarker"></property>  
	</bean>
</beans>  

import javax.mail.MessagingException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.ui.freemarker.*;   
import org.springframework.web.servlet.view.freemarker.*;   
import freemarker.template.*;   

public abstract class EmailAbstract {
	
	protected String from;
	protected String subject;
	protected JavaMailSender sender;
	protected FreeMarkerConfigurer freeMarkerConfigurer=null; //FreeMarker的技术类   
	 
	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 JavaMailSender getSender() {
		return sender;
	}

	public void setSender(JavaMailSender sender) {
		this.sender = sender;
	}
	
  public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {   
      this.freeMarkerConfigurer = freeMarkerConfigurer;   
  }
	/**
	 * 发送单个html格式邮件
	 */
	public abstract void sendEmail(String content,String address);
	/**
	 * 批量发送html格式邮件
	 */
	public abstract void sendBatchEmail(String content,List<String> address);
}

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.*;   
import org.springframework.web.servlet.view.freemarker.*;   
import freemarker.template.*;   

public class EmailService extends EmailAbstract {

	/**
	 * 发送带模板的单个html格式邮件
	 */
	public void sendMessage(String content,String address) throws MessagingException {
		  MimeMessage msg = sender.createMimeMessage();
		  //设置utf-8或GBK编码,否则邮件会有乱码,true表示为multipart邮件 
		  MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); 
		  helper.setTo(address);	//邮件接收地址
		  helper.setFrom(from);	  //邮件发送地址,这里必须和xml里的邮件地址相同一致
		  helper.setSubject(subject);	//主题 
		  String htmlText = getMailText(content);   //使用模板生成html邮件内容   
		  helper.setText(htmlText, true);	//邮件内容,注意加参数true,表示启用html格式    
		  sender.send(msg);	//发送邮件
	}
	/**
	 * 批量发送带附件的html格式邮件
	 */
	public void sendBatchEmail(String content,List<String> address) throws MessagingException {
		MimeMessage msg = sender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
		String toList = getMailList(address);
		InternetAddress[] iaToList = new InternetAddress().parse(toList);
		msg.setRecipients(Message.RecipientType.TO,iaToList);
		helper.setFrom(from);
		helper.setSubject(subject);
		helper.setText(content, true);
         //添加内嵌文件,第1个参数为cid标识这个文件,第2个参数为资源     
		helper.addInline("a", new File("E:/logo_a.jpg")); //附件内容       
	 	helper.addInline("b", new File("E:/logo_b.png"));       
		File file=new File("E:/测试中文文件.rar");        
		// 这里的方法调用和插入图片是不同的,使用MimeUtility.encodeWord()来解决附件名称的中文问题      
		helper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
         //如果主题出现乱码,可以使用该函数,也可以使用下面的函数   
          //helper.setSubject(MimeUtility.encodeText(String text,String charset,String encoding))     
         //第2个参数表示字符集,第三个为目标编码格式。
          //MimeUtility.encodeWord(String word,String charset,String encoding)  
		sender.send(msg);
	}
	/**
	 * 集合转换字符串
	 */
	public String getMailList(List<String> to){     
	  StringBuffer toList = new StringBuffer();
	  int length = to.size();
	  if(to!=null && length <2){
	       toList.append(to.get(0));
	  }else{
	       for(int i=0;i<length;i++){
	               toList.append(to.get(i));
	               if(i!=(length-1)){
	                   toList.append(",");
	               }
	       }
	   }
	   return toList.toString();
	}
	//通过模板构造邮件内容,参数content将替换模板文件中的${content}标签。   
  private String getMailText(String content) throws Exception {   
    String htmlText = "";    
    //通过指定模板名获取FreeMarker模板实例   
    Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl");   
    Map map = new HashMap();	//FreeMarker通过Map传递动态数据   
    map.put("content",content); //注意动态数据的key和模板标签中指定的属性相匹配   
    //解析模板并替换动态数据,最终content将替换模板文件中的${content}标签。   
    htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);   
    return htmlText;   
  } 
}


使用Spring提供的MailSender异步发送文本邮件 http://www.blogjava.net/sitinspring/archive/2008/08/08/220880.html
分享到:
评论
4 楼 aptech406328627 2014-09-11  
求解救,没弄好QQ:1053942353
3 楼 540599354 2014-04-18  
谢谢已经在用了!
2 楼 alandog 2013-09-25  
非常好,非常感谢,刚好需要了解这个发短信实现
1 楼 superzhouych 2011-03-31  
讲得非常浅显易懂,谢啦

相关推荐

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

    3、Spring Boot 发送邮件(文本格式的邮件、发送HTML格式的邮件、发送带附件 的邮件、发送带静态资源的邮件) 个人觉得Springboot的开发简单的归纳为三步jar包引入,配置,应用。 (一)简单使用 1)JSP的使用...

    Spring 使用163发邮件带附件

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

    Spring 高效批量邮件发送

    它提供了send()方法,可以用来发送简单的文本邮件或者带有附件的复杂邮件。为了实现批量邮件发送,我们需要创建一个邮件服务类,该类将利用MailSender接口,并通过适当的方式管理邮件的队列和发送过程。 批量邮件...

    springboot发送邮件(含带附件的邮件,定时任务等功能)

    本教程将详细介绍如何在Spring Boot项目中实现邮件发送功能,包括发送普通邮件和带有附件的邮件,以及如何设置定时任务来自动发送邮件。 首先,我们需要在项目中引入Spring Boot的邮件服务依赖。在`pom.xml`或`...

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

    本项目聚焦于使用Spring Boot来开发一个支持多附件邮件发送的微服务平台。这个平台可以方便地集成到各种业务场景中,例如发送报告、通知或者用户验证邮件。 首先,我们需要了解Spring Boot的邮件服务模块——`...

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

    在本例中,可能需要一个`Mail`实体类,用来表示邮件信息,以及一个对应的Mapper接口和XML配置文件,用于执行SQL操作,如插入邮件记录或者获取邮件模板等。 邮件发送功能通常涉及到SMTP服务器,我们需要配置SMTP...

    使用springMail发送带附件的email

    在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail API**: 这是Java平台上的一个标准API,用于处理邮件相关任务,如创建、发送和接收邮件。它...

    Spring邮件发送

    总结起来,Spring邮件发送功能通过`JavaMailSender`接口提供了灵活且强大的邮件服务集成。开发者可以根据需求配置SMTP服务器信息,创建邮件并发送,甚至处理复杂格式的邮件,如HTML邮件和带附件的邮件。这使得在Java...

    采用 spring 发送带 附件的邮件(完整示例,带 jar 包)

    本例为完整的采用spring 发送带 附件的邮件。 下载后需要改动的地方: 1.在mail.properties中将接收者邮箱地址(username),邮箱密码换成真实的。 2.在SpringJavaMailDemo类中把发送者和接收者邮箱地址换成真实地址...

    spring各种邮件发送

    结合源码阅读和实际应用,开发者可以更深入地理解和掌握Spring框架的邮件发送功能,提升工作效率。对于那些需要发送大量或定期邮件的应用,还可以考虑使用邮件队列服务,如Amazon SES或SendGrid,配合Spring进行集成...

    Springboot发送邮件

    本主题将深入探讨如何使用Spring Boot实现邮件发送功能,涵盖了文本邮件、图片邮件、模板邮件和HTML邮件的发送。 一、Spring Boot集成邮件服务 Spring Boot通过集成了JavaMailSender接口和JavaMailSenderImpl类,...

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

    总结,"spring velocity 发邮件"涉及到的关键技术是Spring的邮件服务组件和Velocity模板引擎的结合使用,通过它们可以实现复杂且个性化的邮件发送功能,包括单发、群发邮件,以及包含图片和附件的邮件。在实际开发中...

    spring boot发送普通文本邮件/HTML邮件/附件邮件/图片邮件完整代码.zip

    在Spring Boot应用中,发送...在实际应用中,可能还需要处理异常、异步发送、模板引擎集成等功能,但这些基础示例已经足够帮助理解如何在Spring Boot中使用邮件服务。记得根据实际邮件服务提供商的设置调整SMTP配置。

    基于java spring邮件群发的demo

    在群发邮件时,只需要遍历接收者列表,调用`JavaMailSender`的`send()`方法即可。 此外,项目中还提到了`jdbc.properties`文件,这表明系统可能使用了数据库来存储邮件接收者的信息或其他与邮件相关的数据。MySQL是...

    (源码)基于Spring Boot框架的邮件发送系统.zip

    项目涵盖了发送文本邮件、HTML邮件、带附件的邮件以及使用模板发送邮件等多种功能。 ## 项目的主要特性和功能 1. 文本邮件发送支持发送简单的文本邮件。 2. HTML邮件发送支持发送HTML格式的邮件,可以嵌入图片和...

    java发送邮件 spring发送邮件

    总的来说,Spring框架提供了强大的邮件发送支持,通过`JavaMailSender`接口和相关辅助类,开发者可以方便地实现各种邮件功能,无论是简单的文本邮件还是包含复杂格式和附件的邮件。在实际项目中,确保正确配置SMTP...

    邮件模板发送(SendMailTemplate)

    本文将深入探讨邮件模板发送的概念、工作原理以及如何实现这一功能。 邮件模板发送的核心是通过预定义的HTML模板来构建邮件内容。HTML模板允许设计者使用丰富的文本格式、图像、链接和布局,为用户提供视觉吸引力强...

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

    SpringMail使得在应用程序中集成邮件服务变得更加简单,它支持多种功能,包括发送带有多个附件、多接收者(包括抄送和暗送)的邮件。下面将详细阐述Spring邮件发送服务的核心概念和技术细节。 首先,我们需要配置...

    Spring邮件发送源码

    Spring提供了一套完整的邮件服务支持,通过其`org.springframework.mail`包,我们可以方便地实现发送各种类型的邮件,包括纯文本、HTML格式、带有附件以及嵌入图片的邮件。 首先,让我们来了解如何配置Spring邮件...

Global site tag (gtag.js) - Google Analytics