天天看點

[Java基礎]-- java發送郵件

package email;

import java.util.Properties;  
import javax.activation.DataHandler;  
import javax.activation.FileDataSource;  
import javax.mail.*;  
import javax.mail.internet.*;  
/**
 * 
 *@author yang
 *@類功能說明:測試發送郵件
 *@修改日期:2015-7-28 下午04:10:50
 *@修改說明:本程式用java來實作Email的發送,所用到的協定為:SMTP,端口号為25;
 *     方法:用Socket進行實作,打開用戶端的Socket,并連接配接上伺服器
 *      如:Socket sockClient = new Socket("smtp.qq.com",23);這表示發件方連接配接的是QQ郵箱的伺服器,端口号為23
 *@建立時間:2015-7-28 下午04:10:50
 */
public class Email{  
       
    private MimeMessage mimeMsg;    //  整個MIME郵件對象 
    private Session     session;    //  專門用來發送郵件的Session會話 
    private Properties  props;      //  封裝郵件發送時的一些配置資訊的一個屬性對象 
    private String      username;   //  發件人的使用者名 
    private String      password;   //  發件人的密碼
    private Multipart   mp;         //  用來實作附件添加的元件 
    /** 
     * 發送參數初始化,有的伺服器不需要使用者驗證,是以這裡對使用者名和密碼進行初始化"" 
     * SMTP伺服器的位址,比如要用QQ郵箱,哪麼應為:"smtp.qq.com",126為:"smtp.126.com" 
     */
    
    public Email(String smtp){  
        username = "";  
        password = "";  
        setSmtpHost(smtp);   // 設定郵件伺服器  
        createMimeMessage(); // 建立郵件   
    }  
    /** 
     * 設定發送郵件的主機(JavaMail需要Properties來建立一個session對象。 
     * 它将尋找字元串"mail.smtp.host",屬性值就是發送郵件的主機); 
     */  
    public void setSmtpHost(String hostName){  
        System.out.println("設定系統屬性:mail.smtp.host = " + hostName);  
        if (props == null)  
            props = System.getProperties();  
        props.put("mail.smtp.host", hostName);  
    }  
    /** 
     * (這個Session類代表JavaMail 中的一個郵件session. 每一個基于 
     * JavaMail的應用程式至少有一個session但是可以有任意多的session。 在這個例子中, 
     * Session對象需要知道用來處理郵件的SMTP 伺服器。 
     */  
    public boolean createMimeMessage(){  
        try{  
            System.out.println("準備擷取郵件會話對象!");  
            // 用props對象來建立并初始化session對象  
            session = Session.getDefaultInstance(props, null);  
        }  
        catch (Exception e){  
            System.err.println("擷取郵件會話對象時發生錯誤!" + e);  
            return false;  
        }  
        System.out.println("準備建立MIME郵件對象!");  
        try{  
            // 用session對象來建立并初始化郵件對象  
            mimeMsg = new MimeMessage(session);  
            // 生成附件元件的執行個體  
            mp = new MimeMultipart();  
        }  
        catch (Exception e){  
            System.err.println("建立MIME郵件對象失敗!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 設定SMTP的身份認證 
     */  
    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");  
    }  
    /** 
     * 進行使用者身份驗證時,設定使用者名和密碼 
     */  
    public void setNamePass(String name, String pass){  
        System.out.println("程式得到使用者名與密碼");  
        username = name;  
        password = pass;  
    }  
    /** 
     * 設定郵件主題 
     *  
     * @param mailSubject 
     * @return 
     */  
    public boolean setSubject(String mailSubject){  
        System.out.println("設定郵件主題!");  
        try{  
            mimeMsg.setSubject(mailSubject);  
        }  
        catch (Exception e){  
            System.err.println("設定郵件主題發生錯誤!");  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 設定郵件内容,并設定其為文本格式或HTML檔案格式,編碼方式為UTF-8 
     *  
     * @param mailBody 
     * @return 
     */  
    public boolean setBody(String mailBody){  
        try{  
            System.out.println("設定郵件體格式");  
            BodyPart bp = new MimeBodyPart();  
            bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody,  
                            "text/html;charset=UTF-8");  
            // 在元件上添加郵件文本  
            mp.addBodyPart(bp);  
        }  
        catch (Exception e){  
            System.err.println("設定郵件正文時發生錯誤!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 增加發送附件 
     *  
     * @param filename 
     *            郵件附件的位址,隻能是本機位址而不能是網絡位址,否則抛出異常  
     * @return 
     */  
    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);  
        }catch (Exception e){  
            System.err.println("增加郵件附件:" + filename + "發生錯誤!" + e);  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 設定發件人位址 
     *  
     * @param from 
     *            發件人位址 
     * @return 
     */  
    public boolean setFrom(String from){  
        System.out.println("設定發信人!");  
        try {  
            mimeMsg.setFrom(new InternetAddress(from));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 設定收件人位址 
     *  
     * @param to 
     *            收件人的位址 
     * @return 
     */  
    public boolean setTo(String to){  
        System.out.println("設定收信人");  
        if (to == null)  
            return false;  
        try{  
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 發送附件 
     *  
     * @param copyto 
     * @return 
     */  
    public boolean setCopyTo(String copyto){  
        System.out.println("發送附件到");  
        if (copyto == null)  
            return false;  
        try{  
            mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto));  
        }catch (Exception e){  
            return false;  
        }  
        return true;  
    }  
    /** 
     * 發送郵件 
     *  
     * @return 
     */  
    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(javax.mail.Message.RecipientType.TO));  
            System.out.println("發送郵件成功!");  
            transport.close();  
        }catch (Exception e){  
            System.err.println("郵件發送失敗!" + e.getMessage());  
            e.printStackTrace();  
            return false;  
        }  
        return true;  
    }  
    
    
    public static void main(String[] args){  
        /** 
         *************切切注意******** 
         * 
         *注意  用此程式發郵件必須郵箱支援smtp服務  在2006年以後申請的163郵箱是不支援的 
         *我知道sina郵箱  sohu郵箱 qq郵箱支援  但是sina和qq郵箱需要手工設定開啟此功能   
         *是以在測試時最好使用這三個郵箱    
         *sina郵箱的smtp設定方法如下 
         *登入sina郵箱 依次點選 郵箱設定--->帳戶--->POP/SMTP設定 将開啟複選框選中 然後儲存 
         * 
         */  

        Email themail = new Email("smtp.126.com");//這裡以網易126郵箱為例子  

// Email themail = new Email("smtp.exmail.qq.com");        //騰訊企業郵箱

        String mailbody = "<a href='http://www.wphtu.ah.cn/' target='_blank'>哈哈</a>發送成功了哦";//郵件正文  
        themail.setNeedAuth(true);  
        themail.setSubject("JAVA發郵件的測試"); //郵件主題  
        themail.setBody(mailbody); //郵件正文  
        themail.setTo("[email protected]"); //收件人位址  
        themail.setFrom("[email protected]");         //發件人位址  ,注意發件人的郵箱必須是126或者網易郵箱
        themail.addFileAffix("E:/log/md/error.log");                // 附件檔案路徑,例如:C:/222.jpg,*注;"/"的寫法; 如果沒有可以不寫  
        themail.setNamePass("[email protected]", "*******");//發件人位址和密碼 **改為相應郵箱密碼  
        themail.sendout();  
        
        //注意如果在發送時報錯:未找到類的錯誤,那麼删除myEclipse安裝目錄下的:javaee.jar包
        //我的安裝目錄是D:/soft_install/plugins/com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038/data/libraryset/EE_5
    }  
}      
上一篇: Compress Words
下一篇: Level Statistics