<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總結(jié)經(jīng)驗

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

    javamail總結(jié)經(jīng)驗(一)

    環(huán)境配置。為了運(yùn)行javamail。我們需要在classpath里導(dǎo)入兩個包:mail.jar和activation.jar,這是在純DOS里或者其它簡單工具使用時才需要這個classpath。如果使用像eclipes這樣的工具就不需要配置。因為myeclipes已經(jīng)幫你做好了。
    為了要發(fā)送郵件和接收郵件,我們必須要遵守smtp和pop3協(xié)議,不過還有其它協(xié)議也可執(zhí)行(如IMAP)。如果把本機(jī)當(dāng)作服務(wù)器來發(fā)送郵件請在http://jakrata.apache.org網(wǎng)站里下載james郵件服務(wù)器,然后解壓在本機(jī)上。運(yùn)行james/bin里的run.bat就可以啟動了服務(wù)器。
    運(yùn)行后在DOS里登錄郵件服務(wù)器。具體命令如下:
    系統(tǒng)管理員:root
    密碼:root
    telnet?localhost?4555
    然后就可以增加郵箱用戶名了。命令如下:
    adduser?用戶名?密碼
    例:adduser?test?test
    這樣就建立了這樣一個郵箱test@localhost?密碼為:test?
    如果想要更多功能用help命令
    注意:如果在本機(jī)裝了郵件服務(wù)器的話,只能在本機(jī)局域網(wǎng)里申請郵箱,發(fā)送和接收。不能發(fā)送到外部的郵箱里去。如果用外部的郵件服務(wù)器像比如163和126的服務(wù)器等就可以隨心所欲的發(fā)郵件了。哈哈是不是很爽呢?
    先看看用james郵件服務(wù)器在本機(jī)上發(fā)郵件吧。先簡單看一個例子。
    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("郵件已發(fā)");
    ????????}
    ????????catch(Exception?e)
    ????????{
    ????????????e.printStackTrace();
    ????????}
    ????}
    //初始化服務(wù)器環(huán)境
    ????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
    ????????{
    ????????????
    //從哪里發(fā)的郵件????????????
    msg.setFrom(new?InternetAddress("test@localhost"));
    ????//發(fā)送到目標(biāo)郵件????????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"));
    //設(shè)置發(fā)送時間
    msg.setSentDate(new?java.util.Date());
    //設(shè)置郵件標(biāo)題
    msg.setSubject("a?test?mail");
    //設(shè)置郵件內(nèi)容
    msg.setText("this?is?the?email?content");
    //指定協(xié)議發(fā)送消息的對像
    Transport?transport=mailSession.getTransport("smtp");
    //發(fā)送消息
    Transport.send(msg);
    }
    catch(Exception?e)
    {
    throw?e;
    }
    }
    發(fā)送完后想要看郵件就要到j(luò)ames->apps->james->var->mail->inboxes就可以看見每個郵箱里的郵件數(shù)了。由于發(fā)過來的是字節(jié)流,郵件包括一個郵件屬性和消息,所以每一封郵件是由二個文件組成的。
    ????????????
    也許沒有學(xué)過的javamail的人看上去會一頭霧水。不要緊,現(xiàn)在一一詳解。先說初始化的內(nèi)容的吧!
    1、????mail.transport.protocol=smtp?這里主要說明的是郵件傳輸協(xié)議。
    2、????mail.smtp.host=localhost?發(fā)送郵件的主機(jī)如果用外部郵件服務(wù)器的話,可以這樣寫
    mail.smtp.host=smtp.163.com這樣就以163.為服務(wù)器了。
    3、mail.smtp.prot=25????smtp端口可以省略,缺省為25

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

    最后看一下使用外部郵件服務(wù)器的使用方法。先看程序再講解,注意在使用外部郵件服務(wù)器時一定要有一個類來認(rèn)證。到時在講。
    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");
    ????????//必須要有一個類來認(rèn)證
    props.put("mail.smtp.auth",?"true");
    props.put("mail.smpt.port",?"25")
    Email_Autherticatorbean?auth?=??new?Email_Autherticatorbean(mailUser,pwd);
    ????????//session認(rèn)證
    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");
    ??????與發(fā)送者的郵箱相連
    transport.connect(host,mailUser,pwd);
    ??????transport.send(msg);
    ????????}
    ????????catch?(SendFailedException?e)
    ????????{
    ????????????e.printStackTrace();
    ????????}
    ????????catch?(Exception?ee)
    ????????{
    ????????????ee.printStackTrace();
    ????????}

    ????}
    }

    認(rèn)證類必須繼承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);
    ????}
    }
    經(jīng)過成功發(fā)送郵件后是不是有點(diǎn)成就感呢!但還有很多疑問比如怎么讀郵件呢?看了下面章節(jié)你就會知道了
    主站蜘蛛池模板: 亚洲av无码专区国产不乱码 | 91精品视频在线免费观看| 免费在线观看黄网| 亚洲sm另类一区二区三区| 免费观看理论片毛片| 亚洲狠狠婷婷综合久久蜜芽| 成人性生免费视频| 美国毛片亚洲社区在线观看 | 亚洲免费视频观看| 久久经典免费视频| 亚洲丰满熟女一区二区哦| 青青青国产免费一夜七次郎| 精品久久久久久亚洲综合网| 免费大香伊蕉在人线国产| 黄网站色视频免费看无下截| 亚洲日韩中文字幕日韩在线| 国产成人无码区免费网站| 亚洲成熟xxxxx电影| 希望影院高清免费观看视频| 亚洲砖码砖专无区2023| 婷婷综合缴情亚洲狠狠尤物| 一个人看的www免费高清| 日本亚洲成高清一区二区三区| 99re6在线视频精品免费下载 | 亚洲图片在线观看| 欧美男同gv免费网站观看| 国产精品久久亚洲一区二区| 亚洲午夜国产精品无码老牛影视| 美丽姑娘免费观看在线观看中文版| 亚洲国产最大av| 亚洲国模精品一区| 2021在线观看视频精品免费| 精品韩国亚洲av无码不卡区| 亚洲精品狼友在线播放| 无码日韩人妻av一区免费| 成人免费网站视频www| 亚洲精品第五页中文字幕| 国产yw855.c免费视频| 97视频免费观看2区| 黄床大片30分钟免费看| 91亚洲精品第一综合不卡播放|