Spring发送邮件小结(附源码)

来源:互联网 发布:java etl 开源框架 编辑:程序博客网 时间:2024/05/16 04:26
Spring发送邮件总结(附源码)

做项目用到自动发邮件功能,网上查阅很多没有给出特别详细的说明,需要自己去探索,做了很多弯路。

在此给大家分享一下自己的代码:

360网盘下载地址:http://yunpan.cn/cJzDQ3gVUHBxY  访问密码 8221



使用时 请将Spring 配置文件里的  用户名、密码、邮箱服务器 还有端口 进行修改如果不是 yeah邮箱。


如果使用maven项目:

Pom.xml

 

添加的内容

<!-- Spring3 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>3.2.4.RELEASE</version></dependency><!-- Spring Email --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context-support</artifactId>    <version>3.2.4.RELEASE</version></dependency><!-- Javamail API -->    <dependency>      <groupId>javax.mail</groupId>      <artifactId>mail</artifactId>      <version>1.4.4</version></dependency>


如果直接导入JAR方式 ,需要引入如下JAR包


EmailUtil

package com.bookmarksClouds.util;import java.io.File;import javax.annotation.Resource;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.FileSystemResource;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Component;@Component("simpleMail")public class EmailUtil {  private JavaMailSender javaMailSender;  private SimpleMailMessage simpleMailMessage;      /**     *      * @方法名: sendMail      * @参数名:@param subject 邮件主题     * @参数名:@param content 邮件主题内容     * @参数名:@param to        收件人Email地址     * @param isHtml  是否是html格式(发送html时使用utf-8编码)     * @描述语:  发送邮件     * @throws MessagingException 发送发生了异常     */    public void sendMail(String subject, String content,boolean isHtml, String to) throws MessagingException    {                            MimeMessage mimeMessage = javaMailSender.createMimeMessage();                      MimeMessageHelper messageHelper =null;            if(isHtml)            {             messageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");            }            else            {               messageHelper = new MimeMessageHelper(mimeMessage,true);            }            messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email            messageHelper.setSubject(subject); //设置邮件主题            if(isHtml)            {             messageHelper.setText(content,true);   //设置邮件主题内容(html格式)            }            else            {             messageHelper.setText(content);   //设置邮件主题内容            }                                   messageHelper.setTo(to);          //设定收件人Email                                  javaMailSender.send(mimeMessage);      }                     /**    * 发送邮件 (包含附件)    * @param subject 主题    * @param content 内容    * @param fileAttachment 附件文件    * @param isHtml 内容是否是html格式    * @param to 发送的邮箱地址    * @throws MessagingException 发送邮件异常(失败)    */    public void sendMail(String subject, String content,boolean isHtml, File fileAttachment,String to) throws MessagingException    {                            MimeMessage mimeMessage = javaMailSender.createMimeMessage();                      MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");                        messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email            messageHelper.setSubject(subject); //设置邮件主题            if(isHtml)            {             messageHelper.setText(content,true);   //设置邮件主题内容(html格式)            }            else            {             messageHelper.setText(content);   //设置邮件主题内容            }            messageHelper.setTo(to);          //设定收件人Email            FileSystemResource file = new FileSystemResource(fileAttachment);                       messageHelper.addAttachment(file.getFilename(), file); //添加附件            javaMailSender.send(mimeMessage);          }               /**    * 发送邮件 (包含附件)    * @param subject 主题    * @param content 内容    * @param classPathResource 附件文件(附加在项目内部时候)    * @param isHtml 内容是否是html格式    * @param to 发送的邮箱地址     * @throws MessagingException     */    public void sendMail(String subject, String content,boolean isHtml, ClassPathResource classPathResource,String to)    throws MessagingException     {                            MimeMessage mimeMessage = javaMailSender.createMimeMessage();          /**             * new MimeMessageHelper(mimeMessage,true)之true个人见解:             * 关于true参数,官方文档是这样解释的:             * use the true flag to indicate you need a multipart message             * 翻译过来就是:使用true,以表明你需要多个消息             * 再去翻一下MimeMessageHelper的API,找到这样一句话:             * supporting alternative texts, inline elements and attachments             * 也就是说,如果要支持内联元素和附件就必须给定第二个参数为true             * 否则抛出 java.lang.IllegalStateException 异常             */            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");            messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email            messageHelper.setSubject(subject); //设置邮件主题            if(isHtml)            {             messageHelper.setText(content,true);   //设置邮件主题内容(html格式)            }            else            {             messageHelper.setText(content);   //设置邮件主题内容            }            messageHelper.setTo(to);          //设定收件人Email            /**  FileSystemResource file = new FileSystemResource(fileAttachment);                       * ClassPathResource:很明显就是类路径资源,我这里的附件是在项目里的,所以需要用ClassPathResource             * 如果是系统文件资源就不能用ClassPathResource,而要用FileSystemResource,例:             *                        ClassPathResource file = new ClassPathResource("attachment/Readme.txt");              */          /**             * MimeMessageHelper的addAttachment方法:             * addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)             * InputStreamSource是一个接口,ClassPathResource和FileSystemResource都实现了这个接口                                      //发送附件邮件            */            ClassPathResource file = classPathResource;             messageHelper.addAttachment(file.getFilename(), file); //添加附件            javaMailSender.send(mimeMessage);              }              //Spring 依赖注入    @Resource    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {        this.simpleMailMessage = simpleMailMessage;    }      //Spring 依赖注入    @Resource    public void setJavaMailSender(JavaMailSender javaMailSender) {        this.javaMailSender = javaMailSender;    }}

Demo

package com.bookmarksClouds.test;import javax.mail.MessagingException;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.bookmarksClouds.util.EmailUtil;public class EmailUtilTest{ private  ApplicationContext factory = new ClassPathXmlApplicationContext(            new String[] {"spring/spring-smtp-mail-attachment.xml"});@Testpublic void test() {EmailUtil mail = (EmailUtil)factory.getBean("simpleMail");String html= "<html><head><META http-equiv=Content-Type content='text/html; charset=UTF-8'><title>云书签注册激活</title></head><body>欢迎使用,云书签。<br/><a href='www.baidu.com' >云书签</a><br>点击上面超链接 激活账户信息!</body><html>";        try {mail.sendMail("云书签注册自动发邮件", html,true, "***@qq.com");} catch (MessagingException e) {System.out.println("发送邮件失败!");//e.printStackTrace();}}}

 Spring配置文件

<?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:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-3.2.xsd           http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">                      <context:annotation-config/><context:component-scan base-package="com.bookmarksClouds"/>  <bean  id ="mailSender"  class ="org.springframework.mail.javamail.JavaMailSenderImpl" >          <!--  服务器  -->           <property  name ="host"  value ="smtp.163.com"   />           <!--  端口号  -->           <property  name ="port"  value ="25"   />           <!--  用户名  -->           <property  name ="username"  value ="邮箱地址"   />           <!--   密码    -->           <property  name ="password"  value ="邮箱密码"   />           <!--  SMTP服务器验证  -->           <property  name ="javaMailProperties" >               <props >                   <!--  验证身份  -->                  <prop  key ="mail.smtp.auth" > true </prop >              </props >           </property >  </bean >  <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">        <!-- 发件人email -->        <property name="from" value="发送邮箱地址" />        <!--          收件人email        <property name="to" value="to@yeah.net" />        email主题(标题)        <property name="subject" value="Subject" />        email主题内容        <property name="text">          <value>ContentText</value>        </property>        -->    </bean>   </beans>