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

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

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

    隨筆 - 24  文章 - 6  trackbacks - 0
    <2005年3月>
    272812345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    隨筆分類(23)

    積分與排名

    • 積分 - 13835
    • 排名 - 2084

    最新評(píng)論

     二、 郵件的收取

    Bromon原創(chuàng) 請(qǐng)尊重版權(quán)

       通常情況下我們都使用pop3協(xié)議來(lái)收郵件,IMAP嘛現(xiàn)在就不涉及了。收郵件的功能雖然我用了很多時(shí)間才基本搞清楚,不過講起來(lái)就so easy了,一個(gè)程序就可以基本包括。

       郵件大致可以分三種:純文本郵件、含有其他數(shù)據(jù)的文本郵件、含有附件的郵件。

    /*
     * Created on 2004-4-26
     
    */

     package org.bromon.mail;
     import javax.mail.
    *;
     import java.util.
    *;
     import java.io.
    *;

     
    /**
     * @author Bromon
     
    */

     
    public class Receiver
     
    {
     Folder inbox;
     Store store;

     
    //連接郵件服務(wù)器,獲得所有郵件的列表
     public Message[] getMail(String host,String name,String password) throws Exception
     
    {
      Properties prop
    =new Properties();
      prop.put(
    "mail.pop3.host",host);
      Session session
    =Session.getDefaultInstance(prop);
      store
    =session.getStore("pop3");
      store.connect(host,name,password);
      
      inbox
    =store.getDefaultFolder().getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      
      Message[] msg
    =inbox.getMessages();
      
      FetchProfile profile
    =new FetchProfile();
      profile.add(FetchProfile.Item.ENVELOPE);
      inbox.fetch(msg,profile);
      
      
    return(msg);
     }


     
    //處理任何一種郵件都需要的方法
     private void handle(Message msg) throws Exception
     
    {
      System.
    out.println("郵件主題:"+msg.getSubject());
      System.
    out.println("郵件作者:"+msg.getFrom()[0].toString());
      System.
    out.println("發(fā)送日期:"+msg.getSentDate());
     }


     
    //處理文本郵件
     public void handleText(Message msg) throws Exception
     
    {
      
    this.handle(msg);
      System.
    out.println("郵件內(nèi)容:"+msg.getContent());
     }


     
    //處理Multipart郵件,包括了保存附件的功能
     public void handleMultipart(Message msg) throws Exception
     
    {
      String disposition;
      BodyPart part;
      
      Multipart mp
    =(Multipart)msg.getContent();
      
    int mpCount=mp.getCount();//Miltipart的數(shù)量,用于除了多個(gè)part,比如多個(gè)附件
      for(int m=0;m<mpCount;m++)
      
    {
       
    this.handle(msg);
       
       part
    =mp.getBodyPart(m);
       disposition
    =part.getDisposition();
       
    if(disposition!=null && disposition.equals(Part.ATTACHMENT))//判斷是否有附件
       {
        
    //this.saveAttach(part);//這個(gè)方法負(fù)責(zé)保存附件,注釋掉是因?yàn)楦郊赡苡胁《荆?qǐng)清理信箱之后再取掉注釋
       }
    else{
        System.
    out.println(part.getContent());
       }

      }

     }


     
    private void saveAttach(BodyPart part) throws Exception
     
    {
      String temp
    =part.getFileName();//得到未經(jīng)處理的附件名字
      String s=temp.substring(11,temp.indexOf("?=")-1);//去到header和footer
      
      
    //文件名一般都經(jīng)過了base64編碼,下面是解碼
      String fileName=this.base64Decoder(s);
      System.
    out.println("有附件:"+fileName);
      
      InputStream 
    in=part.getInputStream();
      FileOutputStream writer
    =new FileOutputStream(new File(fileName));
      
    byte[] content=new byte[255];
      
    int read=0;
      
    while((read=in.read(content))!=-1)
      
    {
       writer.write(content);
      }

      writer.close();
      
    in.close();
     }


     
    //base64解碼
     private String base64Decoder(String s) throws Exception
     
    {
      sun.misc.BASE64Decoder decoder 
    = new sun.misc.BASE64Decoder();
      
    byte[] b=decoder.decodeBuffer(s);
      
      
    return(new String(b));
     }


     
    //關(guān)閉連接
     public void close() throws Exception
     
    {
      
    if(inbox!=null)
      
    {
       inbox.close(
    false);
      }

      
      
    if(store!=null)
      
    {
       store.close();
      }

     }


     
    public static void main(String args[])
     
    {
      String host
    ="pop.163.com";
      String name
    ="bromon";
      String password
    ="My password";
      
      Receiver receiver
    =new Receiver();
      
      
    try
      
    {   
       Message[] msg
    =receiver.getMail(host,name,password);
       
       
    for(int i=0;i<msg.length;i++)
       
    {
        
    if(msg[i].isMimeType("text/*"))//判斷郵件類型
        {
         receiver.handleText(msg[i]);
        }
    else{
         receiver.handleMultipart(msg[i]);
        }

        System.
    out.println("****************************");
       }

       receiver.close();
      }
    catch(Exception e)
      
    {
       System.
    out.println(e);
      }

     }

     }


       沒有習(xí)慣讀java代碼的兄弟可能會(huì)覺得麻煩了一點(diǎn),其中有個(gè)小問題,下載的附件會(huì)再文件名后面加上一個(gè)”#”符號(hào),不知道這是javamail的特別處理還是pop3的規(guī)范。通過程序更改文件名很簡(jiǎn)單,就不說(shuō)了。對(duì)于email還有很多其他的操作,可以自己取查看一下javadoc,我就不影響大家探索的樂趣了。在Properties里配置代理服務(wù)器,可以讓程序通過代理收發(fā)郵件,一般的HTTP、socks 4、socks 5都支持。

    posted on 2005-03-28 13:26 Sometimes Java 閱讀(440) 評(píng)論(0)  編輯  收藏 所屬分類: Tech Flow
    主站蜘蛛池模板: 久久国产亚洲观看| 亚洲精品高清国产一线久久| 91亚洲国产成人久久精品网址| 亚洲爽爽一区二区三区| 亚洲天堂福利视频| 亚洲免费视频网址| 亚洲喷奶水中文字幕电影| 最近免费中文在线视频| 国产大片线上免费看| 亚洲AV日韩AV永久无码色欲| 国产午夜鲁丝片AV无码免费| 精品韩国亚洲av无码不卡区| 亚洲精品视频免费在线观看| 亚洲黄色在线播放| 国产成人免费ā片在线观看老同学 | 中文字字幕在线高清免费电影| 中文字幕影片免费在线观看| 亚洲综合另类小说色区| 亚洲精品伦理熟女国产一区二区| 日本不卡高清中文字幕免费| 免费精品国产自产拍在线观看| 在线v片免费观看视频| 亚洲乱人伦中文字幕无码| 深夜国产福利99亚洲视频| 成在线人视频免费视频| 久久久久亚洲精品无码蜜桃| 国产精品无码免费播放| 亚洲国产美女福利直播秀一区二区| 一二三四在线观看免费高清中文在线观看| 亚洲综合av一区二区三区不卡 | 全免费a级毛片免费**视频 | 亚洲天堂2016| 欧洲一级毛片免费| 亚洲a∨无码精品色午夜| 国产亚洲精品久久久久秋霞| 久久久久久精品成人免费图片| 久久久久久亚洲精品无码| 亚洲中文字幕在线观看| 4399好看日本在线电影免费| 亚洲一卡2卡4卡5卡6卡残暴在线| 免费视频淫片aa毛片|