Spring发送邮件说明文档

1. 原理介绍

   Spring内置了一个邮件发送器JavaMailSenderImpl,实现了JavaMailSender接口,可以用来发送文本邮件、HTML邮件、发送附件等。

 Spring提供了发送电子邮件的功能,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。

JavaMailSenderImpl是个普通的Java Bean,可以在配置文件中配置,也可以在程序中动态地创建。创建时设置上需要的信息。

2. 配置文件

 

   2.1 引入jar 

              activation.jar  

           commons-logging-1.1.1.jar

           mail.jar

           spring-beans-3.2.9.RELEASE.jar

           spring-context-3.2.9.RELEASE.jar

           spring-context-support-3.2.9.RELEASE.jar

           spring-core-3.2.9.RELEASE.jar

   2.2 配置文件

    

      文件在项目中的位置:src根目录下

  JavaMailSenderImpl可以配置到applicationContext-mail.xml中,在Action中直接使用即可。配置代码如下:

 <?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.126.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@126.com</value>      

        </property>      

        <property name="password">      

            <value>password</value>      

        </property>      

    </bean>      

</beans>     

知识拓展:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件

 

   2.3 Java代码

 范例一: 发送text格式的Email类:

 package drizzt.test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

 

/**

 * @author  发送text格式的Email类:

 *

 */

public class EmailUtil {

 

 private static EmailUtil emailUtil = null;    

     

    public ApplicationContext ctx = null;     

        

    private EmailUtil() {    

        //获取上下文             

   ctx = new ClassPathXmlApplicationContext("applicationContext-mail.xml");       

    }    

       

    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("chenxbook@126.com");//发件者

                mail.setSubject(subject);//主题     

              mail.setText(text);//邮件内容       

                sender.send(mail)`;       

            } catch (Exception e) {       

                e.printStackTrace();      

            }    

        }    

    }    

        

    public static void main(String[] args) {        

        String  mail_title  = "注册成功";    

        String  mail_text= "恭喜!您已经注册成功.欢迎使用本网站,主页地址:http://www.baidu.com";    

        EmailUtil email = EmailUtil.getInstance();       

        email.sentEmails("1005190183@qq.com",mail_title,mail_text);

        

    }     

}

 

 

范例二:发送带附件的邮件

    

package drizzt.test;

import java.util.ArrayList;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

 

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessagePreparator;

 

/**

 * @author Administrator

 *

 */

public class SpringMail {

 

/**

 * 发送带附件的邮件

     * @param JavaMailSender 邮件发送器

     * @throws Exception

 *  MimeMessagePreparator 回调接口,用于准备JavaMail的MIME信件。

 

 */

private void sendMimeMessage(final JavaMailSender sender) throws Exception {

        //附件文件集合

           final List files = new ArrayList(); //定义了一个集合

         //实例化一个实现该接口的匿名内部类,接口本身是用来抽象的,实例化接口没有意义。

       MimeMessagePreparator mimeMail = new MimeMessagePreparator() {

       public void prepare(MimeMessage mimeMessage) throws MessagingException {

       //设置邮件的发送方式、收件人地址

       mimeMessage.setRecipient(Message.RecipientType.TO,

                        new InternetAddress("2747227593@qq.com"));

       //设置邮件的发件人地址

       mimeMessage.setFrom(new InternetAddress("15810588960@163.com"));

       //设置邮件的主题

       mimeMessage.setSubject("Spring发送带附件的邮件", "gb2312");

        //DataHandler&FileDataSource 将图片、附件读到邮件中

          // MimeMultipart  功能:设置文本/图片/附件之间的关系类

               Multipart mp = new MimeMultipart();

                

                //Multipart添加正文

                MimeBodyPart content = new MimeBodyPart();

                content.setText("内含spring邮件发送的例子,请查收!");

                

                //MimeMessage添加(Multipart代表正文)

                mp.addBodyPart(content);

                files.add("src/drizzt/test/SpringMail.java");

                files.add("src/applicationContext-mail.xml");

                

                //Multipart添加附件

                Iterator it = files.iterator();

                while(it.hasNext()) {

                    MimeBodyPart attachFile = new MimeBodyPart();

                    String filename = it.next().toString();

                    FileDataSource fds = new FileDataSource(filename);

                    attachFile.setDataHandler(new DataHandler(fds));

                    attachFile.setFileName(fds.getName());

                    mp.addBodyPart(attachFile);

                }

                

                files.clear();

                

                //Multipart添加MimeMessage

                mimeMessage.setContent(mp);

                mimeMessage.setSentDate(new Date());

            }

        };

 

        //发送带附件的邮件

        sender.send(mimeMail);

        

        System.out.println("成功发送带附件邮件!");

    }

 public static void main(String[] args) throws Exception {

        ApplicationContext ctx = new FileSystemXmlApplicationContext(

                "src/applicationContext-mail.xml");

        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");

        SpringMail springMail = new SpringMail();

        

        

        //测试发送带附件的邮件

        springMail.sendMimeMessage(sender);

    }

}

知识拓展:

Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。 要获得关于邮件异常层次的更丰富的信息,请参考Javadocs。

     为了使用JavaMail中的一些特色, 比如MIME类型的信件, Spring提供了MailSender的一个子接口, 即org.springframework.mail.javamail.JavaMailSenderSpring还提供了一个回调接口org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值