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

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

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

    即使世界明天毀滅,我也要在今天種下我的葡萄樹。
    posts - 112, comments - 14, trackbacks - 0, articles - 11

    javamail總結經驗

    Posted on 2006-08-31 17:39 閱讀(256) 評論(0)  編輯  收藏 所屬分類: Java

    javamail總結經驗(一)

    環境配置。為了運行javamail。我們需要在classpath里導入兩個包:mail.jar和activation.jar,這是在純DOS里或者其它簡單工具使用時才需要這個classpath。如果使用像eclipes這樣的工具就不需要配置。因為myeclipes已經幫你做好了。
    為了要發送郵件和接收郵件,我們必須要遵守smtp和pop3協議,不過還有其它協議也可執行(如IMAP)。如果把本機當作服務器來發送郵件請在http://jakrata.apache.org網站里下載james郵件服務器,然后解壓在本機上。運行james/bin里的run.bat就可以啟動了服務器。
    運行后在DOS里登錄郵件服務器。具體命令如下:
    系統管理員:root
    密碼:root
    telnet?localhost?4555
    然后就可以增加郵箱用戶名了。命令如下:
    adduser?用戶名?密碼
    例:adduser?test?test
    這樣就建立了這樣一個郵箱test@localhost?密碼為:test?
    如果想要更多功能用help命令
    注意:如果在本機裝了郵件服務器的話,只能在本機局域網里申請郵箱,發送和接收。不能發送到外部的郵箱里去。如果用外部的郵件服務器像比如163和126的服務器等就可以隨心所欲的發郵件了。哈哈是不是很爽呢?
    先看看用james郵件服務器在本機上發郵件吧。先簡單看一個例子。
    import?javax.mail.*;
    import?java.util.*;
    import?javax.mail.internet.*;
    public?class?MyFirstMail?
    {
    ????protected?Session?mailSession;
    ????public?MyFirstMail()throws?Exception
    ????{
    ????????init();
    ????}
    ????public?static?void?main(String[]?args)?
    ????{
    ????????try
    ????????{
    ????????????new?MyFirstMail().sendMail();
    ????????????System.out.print("郵件已發");
    ????????}
    ????????catch(Exception?e)
    ????????{
    ????????????e.printStackTrace();
    ????????}
    ????}
    //初始化服務器環境
    ????public?void?init()throws?Exception
    ????{
    ????????Properties?props=new?Properties();
    ????????props.put("mail.transport.protocol","smtp");
    ????????props.put("mail.smtp.host","localhost");
    ????????props.put("mail.smtp.port","25");
    ????????mailSession=Session.getDefaultInstance(props,?null);;
    ????}
    ????public?void?sendMail()throws?Exception
    ????{
    ????????try
    ????????{
    ????????????
    //從哪里發的郵件????????????
    msg.setFrom(new?InternetAddress("test@localhost"));
    ????//發送到目標郵件????????msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("wang@localhost"));
    ????//抄送的接收者????????msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse("wang@localhost"));
    //暗送的接收者
    msg.setRecipients(Message.RecipientType.BCC,InternetAddress.parse("wang@localhost"));
    //設置發送時間
    msg.setSentDate(new?java.util.Date());
    //設置郵件標題
    msg.setSubject("a?test?mail");
    //設置郵件內容
    msg.setText("this?is?the?email?content");
    //指定協議發送消息的對像
    Transport?transport=mailSession.getTransport("smtp");
    //發送消息
    Transport.send(msg);
    }
    catch(Exception?e)
    {
    throw?e;
    }
    }
    發送完后想要看郵件就要到james->apps->james->var->mail->inboxes就可以看見每個郵箱里的郵件數了。由于發過來的是字節流,郵件包括一個郵件屬性和消息,所以每一封郵件是由二個文件組成的。
    ????????????
    也許沒有學過的javamail的人看上去會一頭霧水。不要緊,現在一一詳解。先說初始化的內容的吧!
    1、????mail.transport.protocol=smtp?這里主要說明的是郵件傳輸協議。
    2、????mail.smtp.host=localhost?發送郵件的主機如果用外部郵件服務器的話,可以這樣寫
    mail.smtp.host=smtp.163.com這樣就以163.為服務器了。
    3、mail.smtp.prot=25????smtp端口可以省略,缺省為25

    javax.mail.session
    session類定義了與遠程郵件系統通信的郵件會話。需要注意的是這個session不同servlet中的會話。Servlet中的會話需要共享一些信息,而mail里的session里沒有這個功能,它只是用于存儲與服務器建立連接會話相關信息和邏輯。Session類是javamail?api最高層入口類,所有其它類都必須經由session對象生效。Session對象它管理配置選項和用于與郵件系統交互的用認證信息息。它通過使用java.util.properties對象配置郵件會話的屬性如郵件服務器,用戶名,密碼,及整個應用程序中共享的其它信息。
    Session并不處現任何授權操作,它只是存儲這些授權信息。Session類的構造器是私有的,它不能被繼承,也不能用new語名創建實例。但它提供了兩個靜態方法getInstance?和getDefaultInstance來獲取session實例,在創建session實例時需要提供一些屬性。具體實現如下:
    ????Properties?props=new?Properties()
    ????Props.put(“mail.transport.protocol”,”smtp”)
    ????Props.put(“mail.smtp.host”,”localhost”);
    ??Props.put(“mail.smtp.prot”,”25”)
    //不加以認證也可以這樣寫
    //Session?session=Session.getDefaultInstance(props,null)
    //如果認證傳入null那么它和不使用認證調用方式一樣?
    ?Session?session=Session.getDefaultInstance(props)
    Javax.mail.?Message
    經過session配置后就可以進行發送消息任務了。這由Message類來完成。Message實現了Part接口,它表示一個郵件消息,包含一系列的屬性和一個消息內容。消息屬性包括了消息址址消息,定義了消息內容的結構(包括內容類型),消息內容使用DataHandler對象包裝實際數據。當郵件消息位于目錄(folder)中時,系統還使用了一個標志位集合來描述它的狀態。
    Message是抽象類,實際使用時必須用一個子類代替以表示具體的郵件格式。比如說javamail?api提供了MimeMessage類,該類擴展了Message,實現了RFC822和MIME標準。有兩個構造方法:
    //一般使用第一種
    ????Message?msg=new?MimeMessage(Session?session)
    Message?msg=new?MimeMessage(MimeMessage?msg)
    獲得消息后,就可以設置消息各個部份了。在設置之前因為要涉及地址。所以講一下地址類
    javax.mail.Address
    Address類表示電子郵件類,它是一個抽象類,它的子類InternetAddress提供具體實現且通常可串行化。若創建的地址只包含電子郵件,只要傳遞電子郵件到構造器即可如
    InternetAddress?addr=new?InternetAddress();
    addr.setAddress(“wang@126.com”)
    或者是:InterntAddress?addr=new?InternetAddress(“wang@126.com”)
    另外,InternetAddress類還提供了地址解析方法如
    Address[]?addrs=InternetAddress.parse(“wang@163.com,f@126.com,zuo@126.com”);
    地址之后就可以發送消息了。
    //設置發送者
    Msg.setFrom(new?InternetAddress(“test@126.com”));
    //設置接收者,并還具有解析功能
    Msg.setRecipients(Message.RecipientType.To,InternetAddress.parse(“zuolin0806@163.com”));
    //抄送的接收者
    Msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(“zuolin0806@163.com”));
    //暗送的接收者
    Msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(“zuolin0806@163.com”));
    //設置消息主題
    ?msg.setSubject(“我的愛”)
    //設置內容的基本機制,其參數Mime類型
    ?msg.setContent(“這是我的內容”,”text/html;charset=gb2312”)
    其中的text/html表示消息內容采用的是HTML格式。如果消息格式是(text/plain),而且使用的是MimeMessage,那么setText()方法設置郵件內容的參數(Mime類型默認為text/plain)
    //設置郵件內容
    msg.setText();
    //設置發送時間
    msg.setSentDate(new?java.util.Date());
    最后一步是就是發送了
    javax.mail.Transport
    該類也是抽象類,它可通過靜態方法和實便方法發送消息。Transport斷承service類。所以它提供了通用方法,如命名傳輸,連接服務器和監聽傳輸事件等。
    //默認
    Transport.send(msg);

    最后看一下使用外部郵件服務器的使用方法。先看程序再講解,注意在使用外部郵件服務器時一定要有一個類來認證。到時在講。
    public?class?MySecondMail
    {
    protected?Session?session?=?null;
    //郵件用戶名
    ????String?mailUser?=?"zuolin0806";
    ????String?host?=?"smtp.163.com";
    ????String?pwd?=?"用戶名的密碼";
    ????public?MySecondMail()
    ????{
    ????????init();
    ????}

    ????public?void?init()
    ????{
    ????????Properties?props?=?new?Properties();
    ????????props.put("mail.transpost.protocol",?"smtp");
    ????????props.put("mail.smtp.host",?"smtp.163.com");
    ????????//必須要有一個類來認證
    props.put("mail.smtp.auth",?"true");
    props.put("mail.smpt.port",?"25")
    Email_Autherticatorbean?auth?=??new?Email_Autherticatorbean(mailUser,pwd);
    ????????//session認證
    session?=?Session.getInstance(props,auth);
    ????????//這個是跟蹤后臺消息。打印在控制臺
    session.setDebug(true);
    ???}
    ????public?static?void?main(String[]?args)
    ????{
    ????????new?MySecondMail().sendMails();
    ????????System.out.println("send?mail?success!");
    ????}
    ????public?void?sendMails()
    ????{
    ????????try
    ????????{
    ????????????Message?msg?=?new?MimeMessage(session);
    ?????????msg.setFrom(new?InternetAddress("zuolin0806@163.com"));
    ????????msg.setRecipients(Message.RecipientType.TO,?InternetAddress.parse("javaboy@126.com"));
    ???????msg.setRecipients(Message.RecipientType.BCC,?InternetAddress.parse("javaboy@126.com"));
    ??????msg.setSentDate(new?Date());
    ??????msg.setSubject("this?is?my?Threee?mail");
    ??????msg.setContent("this?is?my?mail","text/html");
    ??????msg.setText("我成功了。哈哈");

    ?????Transport?transport?=?session.getTransport("smtp");
    ??????與發送者的郵箱相連
    transport.connect(host,mailUser,pwd);
    ??????transport.send(msg);
    ????????}
    ????????catch?(SendFailedException?e)
    ????????{
    ????????????e.printStackTrace();
    ????????}
    ????????catch?(Exception?ee)
    ????????{
    ????????????ee.printStackTrace();
    ????????}

    ????}
    }

    認證類必須繼承Authenticator??例子如下:
    import?javax.mail.*;
    public?class?Email_Autherticatorbean?extends?Authenticator
    {
    ????private?String?m_username?=?null;
    ????private?String?m_userpass?=?null;
    ????public?void?setUsername(String?username)
    ????{
    ????????m_username?=?username;
    ????}
    ????public?void?setUserpass(String?userpass)
    ????{
    ????????m_userpass?=?userpass;
    ????}
    ????public?Email_Autherticatorbean(String?username,?String?userpass)
    ????{
    ????????super();
    ????????setUsername(username);
    ????????setUserpass(userpass);
    ????}
    ????public?PasswordAuthentication?getPasswordAuthentication()
    ????{
    ????????return?new?PasswordAuthentication(m_username,m_userpass);
    ????}
    }
    經過成功發送郵件后是不是有點成就感呢!但還有很多疑問比如怎么讀郵件呢?看了下面章節你就會知道了
    主站蜘蛛池模板: 成人看的午夜免费毛片| 亚洲AⅤ永久无码精品AA| 亚洲av无码无线在线观看| 免费看小12萝裸体视频国产| 国产真人无码作爱视频免费| 色偷偷女男人的天堂亚洲网| 亚洲人成国产精品无码| 亚洲高清视频免费| 污污免费在线观看| 亚洲美女精品视频| 国产精品亚洲不卡一区二区三区| 国产成人yy免费视频| 一级做受视频免费是看美女| 亚洲中字慕日产2020| 中文字幕日韩亚洲| 免费可以在线看A∨网站| 日韩免费高清播放器| 精品亚洲av无码一区二区柚蜜| 日韩亚洲欧洲在线com91tv| 看全色黄大色大片免费久久| 久久久99精品免费观看| 四虎精品免费永久免费视频| 亚洲乱码无限2021芒果| 亚洲AV无码成人精品区天堂| 又大又粗又爽a级毛片免费看| 精品国产sm捆绑最大网免费站| 51午夜精品免费视频| 久久精品熟女亚洲av麻豆| 久久青青草原亚洲av无码app| 亚洲成A人片在线观看无码3D | 亚洲av无码av在线播放| 中文字幕亚洲精品资源网| 中文字幕亚洲一区二区三区| 午夜寂寞在线一级观看免费| 亚洲免费黄色网址| 久9热免费精品视频在线观看| 亚欧国产一级在线免费| 羞羞漫画登录页面免费| 亚洲国产精品无码久久九九大片| 亚洲国产精品成人综合色在线婷婷| 国产亚洲综合久久系列|