<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Mongoose House

    Technical Edition

    統(tǒng)計

    留言簿(4)

    積分與排名

    閱讀排行榜

    基于SSL的JavaMail

    最近有一個項目需要支持SSL的JavaMail收發(fā)郵件. 經(jīng)過一些調(diào)查, 把使用SSL的JavaMail方法總結(jié)如下.

    JavaMail提供商自身缺乏對SSL連接的支持, 所以必須使用JSSE API來支持SSL連接. 下面就是如何使用JSSE API來連接POP3/IMAP/NNTP等mail存儲提供商.

    以下的代碼需要運行在J2SE1.4.x或者以上版本.

    首先, 需要把JSSE的安全provider注冊到當(dāng)前虛擬機的環(huán)境下, 有兩種方法:

    一、修改Java本地安全文件
    <JAVA_HOME>\jre\lib\security\java.security

    二、動態(tài)的添加security provider

    Security.addProvider(? new ?com.sun.net.ssl.internal.ssl.Provider());


    然后, 需要使用JSSE的SSL socket factory來取代默認的socket factory. 取代的辦法就是通過設(shè)置JavaMail的一些缺省屬性來達到這一點.

    ??mail.<protocol>.socketFactory.class
    ??mail.<protocol>.socketFactory.fallback
    ??mail.<protocol>.socketFactory.port
    ??mail.<protocol>.timeout

    下面的代碼就是替換不同協(xié)議的socket factory.

    final ?String?SSL_FACTORY? = ? " javax.net.ssl.SSLSocketFactory " ;

    Properties?props?
    = ?System.getProperties();

    // ?IMAP?provider
    props.setProperty(? " mail.imap.socketFactory.class " ,?SSL_FACTORY);

    // ?POP3?provider
    props.setProperty(? " mail.pop3.socketFactory.class " ,?SSL_FACTORY);

    // ?NNTP?provider?(if?any)
    // ?props.setProperty(?"mail.nntp.socketFactory.class",?SSL_FACTORY);

    如果我們希望JavaMail只處理SSL的連接, 對于非SSL的連接不做處理, 那么我們最好設(shè)置fallback為false.

    // ?IMAP?provider
    props.setProperty(? " mail.imap.socketFactory.fallback " ,? " false " );

    // ?POP3?provider
    props.setProperty(? " mail.pop3.socketFactory.fallback " ,? " false " );

    // ?NNTP?provider?(if?any)
    // ?props.setProperty(?"mail.nntp.socketFactory.fallback",?"false");

    接下來, 我們需要做的就是使用SSL協(xié)議對應(yīng)的端口改變默認端口. 這個端口根據(jù)郵件服務(wù)器的設(shè)置不同不同, 下面的代碼中寫得是一般地SSL默認端口.

    // ?IMAP?provider
    props.setProperty(? " mail.imap.port " ,? " 993 " );
    props.setProperty(?
    " mail.imap.socketFactory.port " ,? " 993 " );

    // ?POP3?provider
    props.setProperty(? " mail.pop3.port " ,? " 995 " );
    props.setProperty(?
    " mail.pop3.socketFactory.port " ,? " 995 " );

    // ?NNTP?provider?(if?any)
    // ?props.setProperty(?"mail.pop3.port",?"563");
    // ?props.setProperty(?"mail.pop3.socketFactory.port",?"563");

    在設(shè)置完所有屬性之后, 我們就可以使用這些屬性來創(chuàng)建session了. 之后的步驟和一般的JavaMail處理完全相同.

    Session?session? = ?Session.getInstance(props);



    ?關(guān)于這個topic的reference還可以參考

    Java Tip 115: Secure JavaMail with JSSE

    利用JavaMail收/發(fā)Gmail郵件(SSL)

    JavaMail: Send mail via SMTP and SSL





    posted on 2006-08-30 02:54 Mongoose 閱讀(2709) 評論(1)  編輯  收藏

    評論

    # re: 基于SSL的JavaMail 2006-09-12 17:28 Mongoose

    有一點注意, 對于《Java Tip 115: Secure JavaMail with JSSE》(http://www.javaworld.com/javatips/jw-javatip115_p.html)中提到的使用DummyTrustManager來繞過證書的方法, 對于JSSE 1.4有一處不兼容. 即需要在SocketFactory中加入如下代碼.
    ---
    public Socket createSocket() throws IOException {
    return factory.createSocket();
    }
    ---
    參考 http://forum.java.sun.com/thread.jspa?threadID=701799&tstart=195  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成年女人免费v片| 亚洲电影一区二区| 在线亚洲97se亚洲综合在线| 亚洲熟女少妇一区二区| 亚洲精品福利视频| 亚洲国产欧美国产综合一区| 国产精品无码亚洲精品2021| 中文字幕成人免费高清在线 | 黄页网站在线免费观看| 拍拍拍无挡免费视频网站| 国产在线观看免费观看不卡| 免费在线观看日韩| 久久精品国产亚洲AV果冻传媒| 亚洲综合偷自成人网第页色| 日韩精品无码免费视频| 99久久精品免费视频| 福利免费观看午夜体检区| 成人免费无码大片A毛片抽搐色欲| 日本免费一区二区三区最新| 亚洲日本va中文字幕久久| 亚洲国产日韩在线成人蜜芽| 美女视频黄a视频全免费网站色 | 国产免费无遮挡精品视频| 亚洲精品无码专区2| 久久综合亚洲色HEZYO社区 | 亚洲 国产 图片| 99re在线视频免费观看| 99在线免费观看视频| 日韩毛片免费无码无毒视频观看| 国产精品亚洲玖玖玖在线观看| 中文字幕亚洲乱码熟女一区二区| 亚洲男人天堂影院| 中文字幕不卡免费视频| 国产成人免费ā片在线观看| 亚洲欧洲日产国产最新| XXX2高清在线观看免费视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 欧美a级成人网站免费| 精品亚洲一区二区| 免费国产黄网站在线观看动图| 日韩免费一区二区三区在线播放|