javamail技術smtp發送郵件

原文鏈接:http://blog.csdn.net/centre10/article/details/5928302

目前,企業在javaEE開發過程中,郵件並不是重點。

環境配置:MyEclipse8.5

設置:只需要在bulit path 下加上 mail.jar(javamail1.4.3)

說明:在以前的javamail開發過程中,還要加入jaf(JavaBeans Activation Framework).jar中activation.jar,在java6中,rt.jar中已經包含了javax.activation.*;

在MyEclipse的安裝目錄搜索javaee.jar會發現這個jar包。它包括了mail.jar和activation.jar

 

 

javamail技術smtp發送郵件程序如下:

 

 

//Config.java

package com.xie.mail.util;

public class Config {
     public static String hostname="smtp.163.com";
}

//sendMail.java

package com.xie.mail.util;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class sendMail {

              private MimeMessage mimeMsg; //MIME郵件對象

              private Session session; //郵件會話對象
              private Properties props; //系統屬性
              private static boolean needAuth = false; //smtp是否需要認證

              private String username = ""; //smtp認證用戶名和密碼
              private String passWord = "";

              private Multipart mp; //Multipart對象,郵件內容,標題,附件等內容均添加到其中後再生成MimeMessage對象

/**
 * 默認構造器,當不提供郵件服務器調用
 */
         public sendMail() {
                 setSmtpHost(Config.hostname);//假如沒有指定郵件服務器,就從getConfig類中獲取
                 createMimeMessage();
              }
/**
 *  帶參構造器,提供郵件服務器
 * @param smtp smtp服務器地址
 */
         public sendMail(String smtp){
                setSmtpHost(smtp);
                createMimeMessage();
              }

 

/**
 * 設置系統屬性對象
* @param hostName String
*/
         public void setSmtpHost(String hostName) {
                    System.out.println("設置系統屬性:mail.smtp.host = "+hostName);
                    if(props == null)props = System.getProperties(); //獲得系統屬性對象

                    props.put("mail.smtp.host",hostName); //設置SMTP主機
}


/**
 * 創建mime郵件對象
* @return boolean 創建成功返回true
*/
        public boolean createMimeMessage() {
                      try{
                            System.out.println("預備獲取郵件會話對象!");
                            session = Session.getDefaultInstance(props,null); //獲得郵件會話對象
                        }catch(Exception e){
                            System.err.println("獲取郵件會話對象時發生錯誤!"+e);
                            return false;
                       }

                      System.out.println("預備創建MIME郵件對象!");
                      try{
                      mimeMsg = new MimeMessage(session); //創建MIME郵件對象
                      mp = new MimeMultipart();

                      return true;
                      }catch(Exception e){
                                 System.err.println("創建MIME郵件對象失敗!"+e);
                                 return false;
                }
         }

 

/**
 * 設置smtp的身份認證,將結果放入系統屬性
* @param need boolean 是否需要進行身份認證
*/
             public void setNeedAuth(boolean need) {
                         System.out.println("設置smtp身份認證:mail.smtp.auth = "+need);
                         if(props == null)props = System.getProperties();

                         if(need){
                                  props.put("mail.smtp.auth","true");
                           }else{
                                  props.put("mail.smtp.auth","false");
                 }
         }
/**
 * 設置smtp登錄的用戶和密碼
* @param name String 用戶名
* @param pass String 密碼
*/
           public void setNamePass(String name,String pass) {
                         username = name;
                         passWord = pass;
                  }
/**
 * 設置郵件主題
* @param mailSubject String 郵件主題
* @return boolean 設置成功,返回true,否則返回false
*/
              public boolean setSubject(String mailSubject) {
                   System.out.println("設置郵件主題!");
                   boolean b=false;
                   try{
                         mimeMsg.setSubject(mailSubject);
                         b=true;
                      }catch(Exception e) {
                         System.err.println("設置郵件主題發生錯誤!");
                         b=false;
                   }
                   return b;
                  }
 /**
  * 設置郵件正文內容
 * @param mailBody String 郵件內容
 * @return 設置成功返回true,否則返回false
 */
             public boolean setBody(String mailBody) {
                 try{
                        BodyPart bp = new MimeBodyPart();
                        bp.setContent(""+mailBody,"text/html;charset=GB2312");
                        mp.addBodyPart(bp);

                        return true;
                  }catch(Exception e){
                         System.err.println("設置郵件正文時發生錯誤!"+e);
                         return false;
                  }
          }
/**
 * 設置郵件附件內容
 * @param filename 附件的文件名
 * @return 成功返回true,否則返回false
 */
          public boolean addFileAffix(String filename) {

                  System.out.println("增加郵件附件:"+filename);
                  try{
                        BodyPart bp = new MimeBodyPart();
                        FileDataSource fileds = new FileDataSource(filename);
                        bp.setDataHandler(new DataHandler(fileds));
                        bp.setFileName(fileds.getName());

                        mp.addBodyPart(bp);

                        return true;
                     }catch(Exception e){
                  System.err.println("增加郵件附件:"+filename+"發生錯誤!"+e);
                  return false;
          }
       }
/**
 * 設置發件人
 * @param from 發件人郵箱地址
 * @return 設置成功返回ture,否則返回false
 */
         public boolean setFrom(String from) {
                  System.out.println("設置發信人!");
                  try{
                         mimeMsg.setFrom(new InternetAddress(from)); //設置發信人
                         return true;
                    } catch(Exception e) {
                     System.out.println("設置發件人郵箱失敗");
                     e.printStackTrace();
                     return false;
                     }
               }
/**
 * 設置收件人郵箱地址
 * @param to 收件人郵箱
 * @return 操作成功返回true,否則返回false
 */
 public boolean setTo(String to){
         if(to == null)return false;
        try{
                    mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
                    return true;
           }catch(Exception e){
            System.out.println("設置收件人郵箱地址失敗。");
            e.printStackTrace();
            return false;
            }
       }
/**
 * 轉發郵件
 * @param copyto 轉發郵件的收件人地址,可以是多個
 * @return 轉發成功,返回ture,否則返回false
 */
         public boolean setCopyTo(String copyto) {
                 if(copyto == null)return false;
                 try{
                       mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
                       return true;
                }catch(Exception e){
                 return false;
                 }
          }
 
/**
 * 發送郵件
 * @return 成功返回ture,否則返回false
 */
          public boolean sendout(){
                    try{
                          mimeMsg.setContent(mp);
                          mimeMsg.saveChanges();
                          System.out.println("正在發送郵件....");

                          Session mailSession = Session.getInstance(props,null);
                          Transport transport = mailSession.getTransport("smtp");
                          transport.connect((String)props.get("mail.smtp.host"),username,passWord);
                          transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
                          //transport.send(mimeMsg);

                          System.out.println("發送郵件成功!");
                          transport.close();

                          return true;
                     }catch(Exception e){
                          System.err.println("郵件發送失敗!"+e);
                          return false;
                     }
              }
/**
 * 函數入口
 * @param args
 */
 public static void main(String[] args) {
              sendMail sMail=new sendMail();
              sMail.setNeedAuth(needAuth);
              //填上你的相關信息
              sMail.setNamePass("[email protected]", "xx");
              sMail.setSubject("你好");
              sMail.setBody("我是xxx。");
              sMail.setFrom("[email protected]");
              sMail.setTo("[email protected]");
              sMail.sendout();               
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章