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

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

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

    Java-Android-jwebee
    Java-Android-jwebee
    對IT人來說,要成為一個(gè)優(yōu)秀的技術(shù)型管理者,除了需要具備扎實(shí)的技術(shù)基礎(chǔ)之外,還應(yīng)該培養(yǎng)良好的人際關(guān)系能力、談判與溝通技能、客戶關(guān)系與咨詢技能、商業(yè)頭腦和財(cái)務(wù)技能以及創(chuàng)新意識,此外還要有巧妙的激勵(lì)技巧和化解沖突與解決突發(fā)問題的能力.

      :郵件群發(fā)是消息在Internet傳遞的最好辦法,同時(shí)也是垃圾郵件的來源。本文以使用JAVAMAIL為例,討論實(shí)現(xiàn)大規(guī)模郵件發(fā)送的方法和技巧。

    關(guān)鍵字SMTPMIMEJAVAMAIL、群發(fā)郵件

    一、引言

    郵件群發(fā)是Internet生活中最常見的一種信息傳遞方式,其傳遞信息的主動(dòng)性、高效率和低費(fèi)用而被眾多商家廣泛采用。我們的電子郵箱隨之充滿了各種類型的商業(yè)郵件,一般稱這些商業(yè)郵件為垃圾郵件。本文筆者運(yùn)用JAVA語言開發(fā)了一個(gè)基于SMTP服務(wù)器的郵件群發(fā)軟件,在以下內(nèi)容中將逐一介紹SMTP協(xié)議,JAVAMAIL包,以及郵件群發(fā)程序的片段等。

    二、簡單郵件傳輸協(xié)議與JAVAMAIL類庫

    1.簡單郵件傳輸協(xié)議(SMTP)從1982年起被用來在不同計(jì)算機(jī)系統(tǒng)間傳遞電子郵件。SMTP使用簡單的ASCII碼文本命令,命令定義長度為4個(gè)字符。SMTP基本命令集及功能如表一所示。

    命令

    功能

    HELO

    從客戶端打開問候信息

    MAIL

    標(biāo)識發(fā)件人

    RCPT

    標(biāo)識收件人

    DATA

    標(biāo)識郵件開始

    SEND

    向終端發(fā)送郵件

    SOML

    執(zhí)行SENDMAIL命令

    SAML

    執(zhí)行SENDMAIL命令

    RSET

    重置SMTP連接

    VRFY

    驗(yàn)證系統(tǒng)用戶名

    EXPN

    查詢列表和別名

    HELP

    查詢命令列表

    NOOP

    不操作

    QUIT

    終止SMTP連接

    TURN

    變換SMTP角色

    表一

    絕大多數(shù)SMTP系統(tǒng)采用一種標(biāo)準(zhǔn)的郵件報(bào)文格式,即RFC822來“規(guī)范”郵件的形式。RFC822明確的劃分郵件為兩個(gè)部分,一部分稱為郵件頭,起其作用是標(biāo)識郵件;第二部分是郵件體。

    郵件頭中包括:

    1Received:用來標(biāo)識將郵件從最初發(fā)送者到目的地進(jìn)行中間轉(zhuǎn)發(fā)的SMTP服務(wù)器,其中含有發(fā)信人及發(fā)信服務(wù)器真實(shí)的信息。

    2Return-path:用來標(biāo)識郵件發(fā)送到目的服務(wù)器所經(jīng)過的路徑。

    3From:顯示發(fā)信人的地址。格式為Fromuser-name

    4Date:記錄郵件發(fā)送時(shí)間。

    5Destination:記錄收郵件地址, 標(biāo)識電子郵件的接受方地址,這些地址是純粹地信息,SMTP僅通過RCPT命令發(fā)送信件。包括To主收件人,Cc抄送收件人,Bcc暗抄送收件人,格式為To/Cc/Bccaddress

    6Resent:表示一封郵件處于某中原因需要從客戶端再次發(fā)送。

    2JAVAMAIL關(guān)于郵件操作最新包是JavaMail1.2,有四個(gè)大類,如表二所示。

    javax.mail

    郵件系統(tǒng)模型類

    javax.mail.event

    Javamail API監(jiān)聽和事件處理類

    javax.mail.internet

    Internet郵件系統(tǒng)類

    javax.mail.search

    JavaMail API郵件搜索類

    表二

    這些類操作分別屬于mailapi.jar(文件包含核心API類),smtp.jar(實(shí)現(xiàn)SMTP協(xié)議功能),pop3.jar(實(shí)現(xiàn)POP3協(xié)議功能),imap.jar(包含IMAP協(xié)議功能)等四個(gè)文件。同時(shí)這四個(gè)文件都被包含在mail.jar中,如過圖省事的話,直接包含mail.jar即可。

    如果要實(shí)現(xiàn)帶附件的郵件收發(fā)功能,還需要包含activation.jar,它提供通過二進(jìn)制數(shù)據(jù)流的形式處理MIME類型的訪問。

    三、程序舉例

    1.首先是連接SMTP服務(wù)器,JAVAMAIL1.2不能實(shí)現(xiàn)SMTP服務(wù)的功能,但可以連接已有的SMTP服務(wù)器。

    //創(chuàng)建一個(gè)屬性對象

          Properties props=System.getProperties();  //創(chuàng)建系統(tǒng)屬性對象

           props.setProperty("mail.transport.protocol","smtp");    //設(shè)置使用smtp協(xié)議

           props.setProperty("mail.smtp.host",server);  //設(shè)置SMTP服務(wù)器地址

           props.setProperty("mail.smtp.port",""+port); //設(shè)置SMTP端口號

           props.setProperty("mail.smtp.auth","true");   //SMTP服務(wù)用戶認(rèn)證

           //創(chuàng)建一個(gè)過程對象

    javax.mail.Session sess = javax.mail.Session.getDefaultInstance(props, null);

    2.創(chuàng)建一封新郵件,一般定義該MimeMessage創(chuàng)建一個(gè)郵件對象。

    MimeMessage msg=new MimeMessage(sess);       //創(chuàng)建郵件對象

    msg.setSubject(“郵件群發(fā)”)               //設(shè)置郵件主題

    msg.setSentDate(new Date());                 //設(shè)置發(fā)信日期

    msg.setFrom(Address address)               //設(shè)置發(fā)信人

    郵件地址只要符合帶有“@”符號并且使用“.”分成三段的字符串都會被SMTP服務(wù)器接受,發(fā)送廣告郵件的商家一般都會在這里修改發(fā)信人地址,所以我們的收件箱中看見的廣告郵件顯示中發(fā)信人內(nèi)容一些的根本不存在郵件地址。如果想查看真正地發(fā)信人,應(yīng)該查看郵件頭中Received的內(nèi)容。

    //設(shè)置主收件人

    msg.setRecipients(Message.RecipientType.TO,Address toaddress);

    //設(shè)置抄送收件人

    msg.addRecipients(Message.RecipientType.CC,Address coaddress);

    //設(shè)置暗抄送人

    msg.addRecipients(Message.RecipientType.BCC,Address bcoaddress);

    SMTP允許一封郵件有多個(gè)接受者,我們可以利用這個(gè)特點(diǎn),在這三個(gè)收件人中填寫多個(gè)收件人地址來提高大規(guī)模發(fā)郵件效率。另外Bcc這個(gè)字段可以隱藏收件人的地址,你有時(shí)可能發(fā)現(xiàn)郵件的收件人不是自己卻收到了這封郵件,就是利用了暗抄這個(gè)屬性。

    3.郵件體一般分為郵件正文本部分和附件部分。正文部分需要設(shè)置文本的格式,包括text文本類型,messafe報(bào)文類型,image圖象類型,video視頻類型,audio聲音類型,application應(yīng)用程序類型,multipart混合類型等。如下例,

         String m_body;                          //為需要添加文本內(nèi)容

        MimeMultipart content=new MimeMultipart();   //創(chuàng)建郵件體對象

        if(content==null) return false;

        MimeBodyPart part=new MimeBodyPart();        //創(chuàng)建文本部分對象

        String type="text/plain";                    //文本類型默認(rèn)為text/plain

        if(m_body.startsWith("<html>") || m_body.startsWith("<HTML>"))

           type="text/html";             //如果是網(wǎng)頁形式的內(nèi)容,則改變類型為text/html

        part.setText(m_body);

        part.setHeader("Content-Type",type);

        content.addBodyPart(part);

        msg.setContent(content);                     //添加文本至郵件中

    msg.saveChanges();                      //保存修改

    4.如何向的郵件中添加附件,利用多用途互聯(lián)網(wǎng)郵件擴(kuò)展(MIME)協(xié)議可以直接二進(jìn)制數(shù)據(jù)添加到標(biāo)準(zhǔn)的RFC822郵件中。在JAVAMAIL中實(shí)現(xiàn)方法如下,

        String filename;                 //用于存儲文件名稱與存放路徑

        if(filename!=null || filename.length()>0){

           MimeBodyPart part=new MimeBodyPart();//創(chuàng)建MIME對象

           DataSource fds = new FileDataSource(filename); //創(chuàng)建文件流對象

           part.setDataHandler(new DataHandler(fds));

       part.setFileName(MimeUtility.encodeText(fds.getName()));

           content.addBodyPart(part);        //添加二進(jìn)制編碼至郵件體中

           }

       msg.setContent(content);                  //添加文本至郵件中

    msg.saveChanges();                        //保存修改

    5.郵件的基本內(nèi)容設(shè)置完畢,發(fā)送SMTP電子郵件。

       Transport trans=sess.getTransport();      //創(chuàng)建發(fā)送對象

       trans.send (msg);                         //發(fā)送

        6.如何群發(fā)郵件,首先我們要有一個(gè)郵件地址列表,郵件地址列表可以向從公共網(wǎng)站獲得,也可以根據(jù)某單位名稱按字典法生成,或者購買用戶表。郵件地址列表應(yīng)該按行存放每個(gè)郵件地址。

    發(fā)信的速度和SMTP的響應(yīng)速度有密切的關(guān)系,所以因該充分利用一封郵件可以有多個(gè)接受地址的條件,將郵件地址按組讀入進(jìn)行發(fā)送,才能提高郵件群發(fā)地效率。下面的例子是每一封信發(fā)給10個(gè)郵件地址。

    import java.io.*;

    import java.net.*;

    import java.util.*;

    import javax.mail.*;

    import javax.activation.*;

    import javax.mail.internet.*;

    class massmail(){

    try{

        FileReader fis = new FileReader(“郵件列表文件”);

        BufferedReader dis = new BufferedReader(fis);

        int i=0;

    while((fileline = dis.readLine())!=null){

      if((i%10)==0)

        MimeMessage msg=new MimeMessage(sess);

    ……

      if((i%10)!=0){                //多個(gè)郵件地址之間要加“,”

             maillist = maillist + “,” + fileline;

           }else{

             maillist = fileline;

           }

           i++;

          if((i%10)==0){     //一封郵件在暗抄地址處加10個(gè)收件人

    msg.addRecipients(Message.RecipientType.BCC, maillist);

        ……                        //設(shè)置郵件內(nèi)容

        Transport trans=sess.getTransport();    //創(chuàng)建發(fā)送對象

      trans.send (msg);        //發(fā)送

    }

    }

    fis.close();

    }catch(Exception error){

    System.out.println("Exception:" + error);

    }



    jwebee

    我的個(gè)人網(wǎng)站
    posted on 2007-07-23 09:26 周行 閱讀(5908) 評論(0)  編輯  收藏 所屬分類: IT技術(shù)
    Java-Android-jwebee
    主站蜘蛛池模板: 24小时日本韩国高清免费| 亚洲黄色免费电影| 18禁超污无遮挡无码免费网站国产| 欧洲精品码一区二区三区免费看| 日韩亚洲Av人人夜夜澡人人爽| 男人的天堂亚洲一区二区三区 | 亚洲日本香蕉视频观看视频| 亚洲午夜AV无码专区在线播放| 成全高清视频免费观看| 97av免费视频| 免费av片在线观看网站| av午夜福利一片免费看久久| 在线观看亚洲电影| 亚洲欧美成aⅴ人在线观看| 亚洲国产日韩在线成人蜜芽| 亚洲福利视频导航| 亚洲av永久无码精品漫画| 国产亚洲欧洲Aⅴ综合一区| 亚洲欧洲日产国码一级毛片| www国产亚洲精品久久久| 日韩精品视频免费观看| 成年网站免费视频A在线双飞| 99国产精品免费观看视频| 国产成人无码区免费网站| 中文字幕永久免费| 成人无码区免费A∨直播| 亚洲一级片免费看| 国产视频精品免费视频| sss在线观看免费高清| 亚洲第一视频在线观看免费| 又粗又长又爽又长黄免费视频| 黄色片网站在线免费观看| 男人和女人高潮免费网站| 激情吃奶吻胸免费视频xxxx| 免费人成大片在线观看播放| 曰韩无码AV片免费播放不卡| 日韩在线一区二区三区免费视频| 日韩精品无码永久免费网站| yellow视频免费看| 亚洲免费观看视频| 中文字幕在线免费观看|