JavaMail发送邮件

来源:互联网 发布:网络法制知识竞赛答题 编辑:程序博客网 时间:2024/05/22 07:46
一、Java Mail API简介 
     Java Mail API是SUN为Java开发者提供的公用的Mail API框架,他支持各种电子邮件通信协议,如IMAP,POP3,和SMTP,为Java应用程序提供了电子邮件处理的公共接口。 Java Mail API的最主要的类包括以下6种。 
1、 javax.mail.Session 
     Session类是定义了一个基本会话,是Java Mail API最高层入口类。所有其他类都是经由这个Session才得以生效。Session对象从java.util.Properties对象中获取信息,如邮件发送服务器、接收邮件协议、发送邮件协议、用户名、密码及整个应用程序中共享的其他信息。
2、 javax.mail.Store 
    Store类是访问接收服务器上邮件帐户的入口,通过Store类的getFolder()方法,可以访问特定的邮件夹。 
3、 javax.mail.Folder 
    Folder类表示了邮件夹,用于分级组织邮件,通过Folder类可以访问邮件夹中的邮件。
4、 javax.mail.Message 
    Message代表了电子邮件。Message类封装的邮件信息,提供了访问和设置邮件内容的方法。邮件中包含如下内容: 
        地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表         
        邮件标题 
        邮件发送和接收****期         
        邮件具体内容 
    Message是个抽象类,常用的子类为javax.mail.internet.MimeMessage。MimeMessage能支持MIME类型电子邮件信息。 
5、 javax.mail.Address 
    Address代表了邮件地址,与Message一样,也是抽象类。常用的子类为javax.mail.internet.InternetAddress类。 
6、 javax.mail.Transport 
    Transport类根据指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport类是抽象类,他提供了一个静态方法send(Message)来发送邮件。

二、JavaMail Demo
1、发送邮件所需的基本信息分装成一个类
public class SendMailInfo{
     //发送邮件的服务器的IP和端口
     private String mailServerHost;
     private String mailServerPort;
     //邮件发送者的地址
     private String fromAddress;
     //邮件接受者的地址
     private String toAddress;
     //登陆邮件发送服务器的用户名和密码
     private String userName;
     private String password;
     //是否需要验证身份验证
     private boolean validate = false;
     //邮件主题
     private String theme;
     //邮件内容
     private String content;
     //邮件附件文件名
     private String[] attachFileNames;
     
     /**
      * @create date:2014年9月14日 下午5:01:00
      * @description:获得邮件发送会话的属性
      * @return
      */   
     public Properties getProperties(){
           Properties pro = new Properties();
            pro.put( "mail.smtp.host", this. mailServerHost);
            pro.put( "mail.smtp.port", this. mailServerPort);
            pro.put( "mail.smtp.auth", validate ? "true" : "false");
            return pro;
     }
     
     /**
      * @create date:2014年9月14日 下午5:00:40
      * @description:判断是否需要验证
      * @return
      */
     public boolean isValidate(){
            return validate;
     }
}

2、登陆邮件服务器时验证
public class MyAuthenticator extends Authenticator{
     
     private String userName = null;
     private String password = null;
     
     public MyAuthenticator() {
            super();
     }

     public MyAuthenticator(String userName, String password) {
            super();
            this. userName = userName;
            this. password = password;
     }
     
     protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication( userName, password);
     }     
}

3、简单邮件发送类
public class MailSender {

     /**
      * @create date:2014年9月14日 下午5:15:45
      * @description:以文本格式发送邮件
      * @param mailInfo
      * @return
      */
     public boolean sendTextMail(SendMailInfo mailInfo){
            //判断是否需要身份验证
           MyAuthenticator authenticator = null;
           Properties pro = mailInfo.getProperties();
            //如果需要身份验证,则创建一个密码验证
            if ( mailInfo.isValidate()) {
                 authenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo .getPassword());
           }
            // 根据会话属性和密码验证器构造一个发送邮件的会话
           Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
            try {
                 //根据session创建一个消息
                Message mailMessage = new MimeMessage(sendMailSession);
                 //创建邮件发送者的地址
                Address from = new InternetAddress(mailInfo.getFromAddress());
                 //设置消息的发送者
                 mailMessage. setFrom(from);
                 //创建邮件的接受者地址,并设置到邮件消息中
                Address to = new InternetAddress(mailInfo.getToAddress());
                 mailMessage. setRecipient(Message.RecipientType. TO, to);
                 //设置邮件消息的主题
                 mailMessage. setSubject(mailInfo.getTheme());
                 //设置邮件消息发送的时间
                 mailMessage. setSentDate(new Date(System.currentTimeMillis()));
                 //设置邮件消息的主要内容
                String mailContent = mailInfo.getContent();
                 mailMessage. setText(mailContent);
                 //发送邮件
                Transport. send(mailMessage);
                 return true;
           } catch ( Exception e) {
                 e.printStackTrace();
           }
            return false;
     }

4、测试方法
public void test1(){
           MailSender mailSender = new MailSender();
            // 这个类主要是设置邮件
           SendMailInfo mailInfo = new SendMailInfo();
           mailInfo.setMailServerHost( "smtp.qq.com");
           mailInfo.setMailServerPort( "25");
           mailInfo.setValidate( true);
           mailInfo.setUserName( "***@qq.com");
           mailInfo.setPassword( "****"); // 您的邮箱密码
           mailInfo.setFromAddress( "****@qq.com");
           mailInfo.setToAddress( "****@qq.com");
           mailInfo.setTheme( "设置邮箱标题" );
           mailInfo.setContent( "设置邮箱内容" );
           System. out.println( mailInfo);
           // 这个类主要来发送邮件
          mailSender.sendTextMail( mailInfo); // 发送文体格式
     }

三、Spring发送邮件
1、Spring Mail API
 1)MailMessage接口:一个邮件信息个公共接口,允许用户设置邮件信息集的值,不用了解底层信息是简单的文本信息还是复杂的扩展类型。具有两个实现类SimpleMaiMessage和MimeMessageHelper。
 2)SimpleMailMessage类:一个简单邮件的模型,包含from、to、subject、text、cc等
 3)MimeMailMessage:实现MailMessage的MIME消息
 4)MimeMassageHelper:填充MimeMaiMessage的助手类

 5)MailSender:定义了发送邮件的策略,实现类JavaMailSenderImpl
6)JavaMailSender:继承MailSender接口,有JavaMailSenderImpl实现类,支持MIME消息参数和回调,通常使用与MimeMessageHelper类方便创建JavaMail mimemessage,包括附件等。
 7)MessagePreparatory:JavaMail MIME消息的回调接口
 8)InternetAddressEditor:直接填充一个InternetAddress属性。
 

注:
(1):MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型

2、Spring Mail Demo
1)mail.properties
mail.host= smtp.qq.com
mail.port= 25
mail.username= ****@qq.com
mail.password= ****
mail.from= ****@qq.com

2)spring.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:p= "http://www.springframework.org/schema/p"
      xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

      <!-- 加载Properties文件 -->
      <bean id = "configurer"
           class= "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
            <property name = "locations">
                 <list >
                      <value >classpath:mail.properties </value >
                 </list >
            </property >
      </bean >
      <bean id = "mailMessage" class= "org.springframework.mail.SimpleMailMessage" >
            <property name = "from">
                 <value >${mail.from} </value >
            </property >
            <!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
      </bean >
      <!-- 申明JavaMailSenderImpl对象 -->
      <bean id = "mailSender" class= "org.springframework.mail.javamail.JavaMailSenderImpl" >
            <property name = "defaultEncoding" value= "UTF-8" />
            <property name = "host" value= "${mail.host}" />
            <property name = "port" value= "${mail.port}"/>
            <property name = "username" value= "${mail.username}" />
            <property name = "password" value= "${mail.password}" />
            <property name = "javaMailProperties">
                 <props >
                      <!-- 设置认证开关 -->
                      <prop key = "mail.smtp.auth"> true</ prop>
                      <!-- 启动调试开关 -->
                      <prop key = "mail.debug"> true</ prop>
                      <!-- 设置发送延时 -->
                      <prop key = "mail.smtp.timeout"> 0</ prop>
                 </props >
            </property >
      </bean >
</ beans>


3)send Mail
public class SendMailTest {
      public static void main(String[] argsthrows MessagingException {

           ApplicationContext ctx = new ClassPathXmlApplicationContext(
                      "spring.xml");
           JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
                     .getBean( "mailSender");
           MimeMessage mailMessage = sender.createMimeMessage();
           MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage ,
                      true);
            messageHelper.setFrom( "****@qq.com" );
            messageHelper.setTo( "*****@qq.com" );

            messageHelper.setSubject( "测试邮件中嵌套图片!!" );
            // true 表示启动HTML格式的邮件
            messageHelper.setText(
                      "<html><head></head><body><h1>hello!!spring image html mail</h1>"
                                + "<a href=http://www.baidu.com>baidu</a>"
                                + "<img src=cid:image/></body></html>"true);

           FileSystemResource img = new FileSystemResource( new File("aa.png" ));

            messageHelper.addInline( "image"img); // 跟cid 一致

            sender.send( mailMessage);
           System. out.println( "邮件发送成功..." );

     }
} 
0 0
原创粉丝点击