国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

javamail模擬郵箱功能發送電子郵件-中級實戰篇【新增附件發送方法】(javamail API電子郵件實例)

2019-11-14 21:37:33
字體:
來源:轉載
供稿:網友
javamail模擬郵箱功能發送電子郵件-中級實戰篇【新增附件發送方法】(javamail API電子郵件實例)

引言:

  JavaMail jar包下載地址:http://java.sun.com/PRoducts/javamail/downloads/index.html

  此篇是緊隨上篇文章而封裝出來的,閱讀本篇章建議先閱讀上一篇 --> javamail模擬郵箱功能發送電子郵件-基礎實戰篇

  上一篇章簡單講解了javamail發送郵件的基本基礎和用到的幾個類,并且所有初始化和發送方法都封裝在一個類里面(為了代碼方便演示),本章節將對各個模塊進行拆分和優化,并且引入附件發送的方法

  要想郵件發送附件,就要引入兩個新類 Multipart BodyPart 兩類

Multipart(報文部件容器) 實則為一個報文容器,而郵件消息 Msage 是由各個子報文 BdyPart(報文單元部件) 類組成

  由此可見所有郵件消息都可由這兩類來實現,接下來的演示發送HTML(兼并了普通Text格式)內容方法是所謂的簡單的模式,因為他只有正文部分,無需多個部件來組合,而附件采納了這兩類,我們可以把包涵附件的郵件拆分為兩個部件來理解,即:正文(郵件內容)部件、附件(郵件附加文件)兩個部件。

示例結構:

  本篇示例代碼分了3類(其實可以說是2類,因為測試test類只有一個main方法來調用郵件發送方法)

  • EmailEntity 類 郵件基礎父類,兩個私有屬性(發件地址,發件密碼),繼承了Authenticator自動校驗類(方便自動校驗) 
  • EmailServiceEnity 類 郵件服務支持類,繼承郵件基礎父類,并聲明其他必要的私有屬性,封裝郵件發送方法
  • TestEmailFunction 類 郵件測試發送類,簡單的main方法里面初始化一個服務支持類,并調用兩個發送方法

實例代碼演示:

  **************復制此三個類可直接跑測試**************注釋部分我盡可能詳細講解每個方法的作用**************

EmailEntity 類

package com.cplatform.movie.back.javamail;import javax.mail.Authenticator;import javax.mail.PassWordAuthentication;/** * 郵件基礎實體類 * @author liuyt * @date  2014-10-24 下午2:12:10 */public class EmailEntity extends Authenticator {    /**     * 用戶名(登錄郵箱)     */    protected static String username;    /**     * 密碼     */    protected static String password;    /**     * 初始化郵箱地址和密碼     * @param username 郵箱     * @param password 密碼     */    public EmailEntity(String username, String password) {        EmailEntity.username = "這里填寫發件箱地址";        EmailEntity.password = "這里填寫發件箱密碼";    }    /**     * 重寫自我檢驗方法     */    @Override    protected PasswordAuthentication getPasswordAuthentication() {        return new PasswordAuthentication(username, password);    }        String getPassword() {        return password;    }        String getUsername() {        return username;    }    public void setPassword(String password) {        EmailEntity.password = password;    }    public void setUsername(String username) {        EmailEntity.username = username;    }}

EmailServiceEnity 類

package com.cplatform.movie.back.javamail;import java.io.File;import java.io.UnsupportedEncodingException;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.NoSuchProviderException;import javax.mail.session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import com.cplatform.movie.back.javamail.SimpleEmailFunction.MyAuthenricator;import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;/** * 郵件服務支持類 * @author liuyt * @date  2014-10-24 下午2:11:38 */public class EmailServiceEnity extends EmailEntity{    // java.util.propertis 類    private transient Properties props;    // 一個郵件會話    private transient Session session;    // 郵件消息    private transient MimeMessage message;    // 郵件內容格式    private final String CONTENT_TYPE_HTML = "text/html;charset=utf-8";    // 端口號     private final static int MAIL_PORT = 25;    // 郵箱服務器列表    private String stmpHostPort;    // 郵件傳輸對象    private Transport transport;    // 郵件發送內容    private String content;        /**     * 實參構造     * @param  mailToaddress  收件人地址,多個以逗號隔開     * @param  content               郵件內容     * @throws MessagingException      * @throws UnsupportedEncodingException      */    public EmailServiceEnity(String mailToaddress, String content) throws UnsupportedEncodingException, MessagingException {        super(username, password);        this.content = content;        this.session = this.initSession();        this.message = this.initMessage(this.getSession(), mailToaddress);        this.transport = this.initTransport(this.getSession());    }        /**     * 根據發件人地址獲取郵件服務器主機地址     * @param username    發件人郵件地址     * @return     */    public String getStmpHostP(String username) {        return "smtp." + username.split("@")[1];    }        /**     * 初始化perps文件     * @return     */    public Properties initPrope() {        // 初始化props文件        props = new Properties();        props.setProperty("mail.transport.protocol", "smtp");//發送郵件協議        props.put("mail.smtp.auth", "true");        //需要驗證        props.put("mail.smtp.host", this.getStmpHostP(username));    //服務器地址          return props;    }        /**     * 初始化session會話     * @return     */    public Session initSession() {        session = Session.getInstance(this.initPrope(),new MyAuthenricator(username, password));        session.setDebug(true);        return session;    }        /**     * 初始化Message消息     * @param session     * @return     * @throws MessagingException     * @throws UnsupportedEncodingException     */    public MimeMessage initMessage(Session session, String mailToaddress) throws MessagingException, UnsupportedEncodingException {        message = new MimeMessage(session);                // 設置發件人地址        message.setFrom(new InternetAddress(username, "要顯示的發件人名稱"));                // 設置郵件主題        message.setSubject("主題:默認主題");                // 設置郵件發送內容和內容的content-type        message.setContent(content.toString(),this.CONTENT_TYPE_HTML);                // 設置郵件接收人地址        String [] address = mailToaddress.split(",");        for(int i=0; i<address.length; i++) {            // addRecipient(該方法為添加收件人列表,參數一為類型:TO-收件人,CC-抄送,參數二為一個郵件地址)            message.addRecipient(Message.RecipientType.TO, new InternetAddress(address[i].trim()));            // 下面方法為傳遞一個收件地址字符串 (二者方法任選其一即可)             message.addRecipients(Message.RecipientType.CC, address[i].trim());        }        return message;    }        /**     * 初始化Transport     * @param session     * @return     * @throws NoSuchProviderException     */    public Transport initTransport(Session session) throws NoSuchProviderException {        transport = session.getTransport();         return transport;    }        /**     * 發送HTML內容郵件 (包括TEXT格式)     * @throws MessagingException      */    public void senDHTMLOrText() throws MessagingException {        this.send();    }        /**     * 附件發送      * @param file        java.io.File     * @param fileName    附件名     * @throws MessagingException     * @throws UnsupportedEncodingException     */    public void sendFile(File file, String fileName) throws MessagingException, UnsupportedEncodingException {        // 獲得Message實例        Message message = this.getMessage();                // 創建multipart容器用來容納bodyPart(部件)        Multipart multipart = new MimeMultipart();                /**         * 創建一個BodyPart內容報文         * 每個消息都有多個部分組成,每個部分是一個BodyPart報文部分,多個BodyPart部分又同時組成一個Multipart的容器         */        BodyPart messageBodyPart = new MimeBodyPart();                // 設置該報文的內容        messageBodyPart.setContent(this.content,this.CONTENT_TYPE_HTML);                // 添加bodyPart報文部分到multiPart容器        multipart.addBodyPart(messageBodyPart);        // 創建一個附件報文        messageBodyPart = new MimeBodyPart();                // 文件源        FileDataSource fds = new FileDataSource(file);                // 設置郵件的內含附件 (設置數據源為復件)        messageBodyPart.setDataHandler(new DataHandler(fds));                // 設置附件的文件名,需進行編碼,否則文件名會亂碼        messageBodyPart.setFileName(MimeUtility.encodeText(fileName));                // 添加到容器        multipart.addBodyPart(messageBodyPart);        // 添加報文容器到消息實例        message.setContent(multipart);                // 發送消息        this.send();    }        /**     * 發送     * 推薦使用方法一,因為方法二如果收件人為多個的話,會為每個人都打開一個Transport通道再關閉     * 而方法一在發送過程中一直保持連接通常,所有操作完成后才關閉     * @throws MessagingException     */    public void send() throws MessagingException {        // 方法一        this.getTransport().connect();        this.getTransport().sendMessage(message, message.getAllRecipients());        this.getTransport().close();                // 方法二        // Transport.send(this.getMessage());    }        /***************** 提供必要的get set方法支持  ************飄逸的分割線****************/    public Session getSession() {        return session;    }    public void setSession(Session session) {        this.session = session;    }    public MimeMessage getMessage() {        return message;    }    public void setMessage(MimeMessage message) {        this.message = message;    }    public Properties getProps() {        return props;    }    public  String getContentTypeHtml() {        return CONTENT_TYPE_HTML;    }    public static int getMailPort() {        return MAIL_PORT;    }    public String getStmpHostPort() {        return stmpHostPort;    }    public void setStmpHostPort(String stmpHostPort) {        this.stmpHostPort = stmpHostPort;    }    public Transport getTransport() {        return transport;    }    public void setTransport(Transport transport) {        this.transport = transport;    }    public void setProps(Properties props) {        this.props = props;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    }

TestEmailFunction 類

package com.cplatform.movie.back.javamail;import java.io.File;import java.io.UnsupportedEncodingException;import javax.mail.MessagingException;public class TestEmailFunction {    public static void main(String[] args) {                EmailServiceEnity e;        // 多個收件人中間以逗號間隔        String mailToaddress = "418874847@QQ.com,12450374@qq.com";                // 正文(內容)部分        String content = "點擊進入» <a href='http://m.survivalescaperooms.com/liuyitian'>劉一天的博客</a>";                try {            e = new EmailServiceEnity(mailToaddress, content);            e.sendHtmlOrText(); // 測試HTML文本            /**             * 切勿使用同一個EmailServiceEnity實例來發送不同內容,如有需要就再初始化一個新實例(否則附件發送失敗且亂碼)             * 因為每個實例在發送完郵件后就會關閉Transport             */            e = new EmailServiceEnity(mailToaddress, content);            // 傳入一個絕對位置的文件路徑            File file = new File("d:/data/adimg/20141022/09/ad_20141022094708943.jpg");            e.sendFile(file,"測試復件.jpg"); // 測試復件發送                    } catch (UnsupportedEncodingException e1) {            e1.printStackTrace();        } catch (MessagingException e1) {            e1.printStackTrace();        }    }}

本章小結:

  • 對代碼進行模塊化,分為實體類和業務類
  • 利用繼承,來共享父類的屬性
  • 簡單責任原則,業務類里面能拆分的功能都進行拆分,各負其責,方便調試
  • 復用性,本章體現在郵件的發送功能,真正實現發送功能的是send方法
  • 其他細節:(附件編碼問題,正文格式聲明,設置收件人方法【多種】)
  • 未涉及:郵件協議

javamail API 系列篇:   

  1. javamail模擬郵箱功能發送電子郵件-基礎實戰篇
  2. javamail模擬郵箱功能發送電子郵件-中級實戰篇【新增附件發送方法】
  3. javamail模擬郵箱功能獲取郵件內容-中級實戰篇【內容|附件下載方法】
  4. javamail模擬郵箱功能--郵件回復-中級實戰篇【郵件回復方法】
  5. javamail模擬郵箱功能--郵件刪除-中級實戰篇【郵件標記方法】

                          寫作不易,難免有疏漏和錯誤,還請慷慨指正,覺得有幫助還請推薦哦。

  ps:歡迎轉載,轉載請注明出處:http://m.survivalescaperooms.com/liuyitian/p/4049402.html


                                            每天多學一點點 代碼少敲一點點


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白水县| 平陆县| 松原市| 吴江市| 林芝县| 神农架林区| 汨罗市| 铁岭县| 洪江市| 汉中市| 大安市| 时尚| 思南县| 卢龙县| 达日县| 江华| 临沧市| 册亨县| 彰武县| 佛坪县| 阿城市| 托里县| 南安市| 清徐县| 仙居县| 永顺县| 泰宁县| 长春市| 承德市| 马边| 昌江| 宜兰县| 清丰县| 丽水市| 乐都县| 龙海市| 肇州县| 长汀县| 安吉县| 宁海县| 肥东县|