JavaMail发送邮件

一、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[]  args throws  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值