http://www.yesky.com/20010323/166128_2.shtmlhttp://www.yesky.com/20020424/1608502_4.shtml
自己看,记得给分

解决方案 »

  1.   

    TO: hitwy1979(天高云淡)
    你給的鏈接資料我也有,不過,還是謝謝你的支持.網上大多只介紹發郵件的,很少有收郵件及相關列表的問題.進來的隨便UP一下.
      

  2.   

    收郵件時,顯示出郵件列表,怎樣在郵件列表中給出鏈接讀取郵件內容?
    -----我是根据message[i]中的[i]来获得邮件内容的.
    還有,在列郵件列表時,為什麼有時通過message[i].getFrom()[0]只顯示一個名稱 而不是完整的郵件地址?
    -----得到的形势是这样的"名称<[email protected]>"由于"<[email protected]>"在IE的解析中被认为是附加标记,所以不会显示.
    怎樣知道郵件中含有附件?
    附件的存取方式是怎樣的?
    ------
    下面方法详细的说明了怎样判断邮件是否含有附件和附件的存取方法,请仔细研究!
    public synchronized Vector getAtta(Message message)
      {
        try
        {
          Vector v_atta=new Vector();//用于存贮附件保存的路径和文件名
          String Content="";
          String[] fileName = null;
          InputStream[] inputStream = null;
          Object o = message.getContent(); //当Message对象含有附件时,其内容会以Multipart的形式存在
          if (o instanceof String)
          {
    //return null;
    //不含附件
          }
          else if (o instanceof Multipart)
          {
    //可能含有附件
    //以Multipart的getBodyPart方法取得内容部分,并以getDisposition方法取得邮件的配置 Multipart mp = (Multipart) o;
    fileName = new String[mp.getCount()];
    inputStream = new InputStream[mp.getCount()];
    OnlineEdit oe=new OnlineEdit();
    String Online_ID=oe.getOnline_ID();
    for (int i = 0, n = mp.getCount(); i < n; i++)
    {
      Part part = mp.getBodyPart(i);
      if (i == 0)
      {
        Content = part.getContent().toString();
      }
      String disposition = part.getDisposition();
      //判断Multipart中是否含有附件的方法.则是依据getDisposition所返回的内容
      if ( (disposition != null) &&
          (disposition.equals(Part.ATTACHMENT) ||
           disposition.equals(Part.INLINE)))
      {
        fileName[i] = part.getFileName();
        System.out.println(fileName[i]);
        fileName[i] = fileName[i].valueOf(i) +
    fileName[i].substring(fileName[i].indexOf("."),
          fileName[i].length());//更换文件名
        fileName[i]="E"+Online_ID+fileName[i];
        //System.out.println(fileName[i]);
        inputStream[i] = part.getInputStream();
        System.out.println(inputStream[i].toString());
        PropPath pp=new PropPath();     String pathName ="\\Atta";
        pathName=pp.getAppPath(pathName);
        ////////////////存贮附件保存的路径和文件名
        v_atta.add(pathName + fileName[i]);
        ////////////////
        File file = new File(pathName + fileName[i]);
        FileOutputStream outfile = new FileOutputStream(file);
        BufferedInputStream br = new BufferedInputStream(inputStream[i]);
        BufferedOutputStream bw = new BufferedOutputStream(outfile);     int b;
        while ( (b = br.read()) != -1)
        {
          bw.write(b);
        }
        bw.flush();
        outfile.close();
      }
    }
          }
          Vector V_res=new Vector();
          V_res.add(fileName);
          V_res.add(Content);
          V_res.add(v_atta);
          return V_res;
        }
        catch (Exception e)
        {
          e.printStackTrace();
          return null;
        }
      }
      

  3.   

    謝謝  runi(我为Java狂).
      

  4.   

    收到的郵件正文怎樣實現分行顯示?
    Multipart mp = (Multipart)message[n].getContent();
    Part part = mp.getBodyPart(i);
    String szBody=part.getContent().toString();為什麼用又下面幾條語句都不能實現郵件正文分行?
    szBody.replaceAll("\n\r","<br>");
    szBody.replaceAll("\r\n","<br>");
    szBody.replaceAll("\r","<br>");
    szBody.replaceAll("\n","<br>");
      

  5.   

    邮件正文有两种格式,如果是HTML格式的,在网页上就可以正常显示;如果是TEXT格式的,则需要分析字符串。
      

  6.   

    犯了一個低級錯誤
    szBody=szBody.replaceAll("\r\n","<br>"); //就可以實現換行
      

  7.   

    這段代碼,為什麼在收郵件的正文內容時,有時不能夠正常顯示?
    .........
    Folder folder = store.getFolder("INBOX"); //Get folder  
    folder.open(Folder.READ_ONLY);
    Message message[] = folder.getMessages();
    Multipart mp = (Multipart)message[nid].getContent(); //nid是指第xxx封郵件的索引
    String szFile="";
    File ffile;String szpath=application.getRealPath("/")+szUser+ "/tmp"; //附件存盤的位置
    String szTmp="";
    ffile = new File(szpath);
    if(!ffile.exists()) ffile.mkdir();
    for (int i=0,n=mp.getCount(); i<n; i++) {
       Part part = mp.getBodyPart(i);
       String disposition = part.getDisposition();
       if((disposition != null) && ((disposition.equals(Part.ATTACHMENT)||(disposition.equals(Part.INLINE))))){
           szFile=MimeUtility.decodeText(part.getFileName()); //取得文件名
           szTmp=szFile;
           ffile = new File(szpath + "/" + szFile);       FileOutputStream outfile = new FileOutputStream(ffile);
           BufferedInputStream br = new BufferedInputStream(part.getInputStream());
           BufferedOutputStream bw = new BufferedOutputStream(outfile);
           int b;
           while ((b = br.read()) != -1)   bw.write(b);
           bw.flush();
           szAttach=szAttach+"<br><a href='../webmail/" + szUser +"/tmp/"+ szTmp + "'>" + szTmp  + "</a>"; //附件及鏈接地址
        }else{
           szBody=part.getContent().toString();
           szBody=szBody.replaceAll("\r\n","<br>"); //將回車符轉為換行符
        }
    上面的代碼,附件都能常顯示,但正文內容有些問題為什麼
    szBody=part.getContent().toString();這句在顯示郵件正文內容有時能正常顯示,有時卻顯示為javax.mail.internet.MimeMultipart@20807c
    甚至出現錯誤?
      

  8.   

    public String GetPart(Part part,int partNum,int msgNum,int x) throws MessagingException,IOException
    {
       String w;
       String s="";
       String s1="";
       String s2="";
       String s3="";
       String s4="";
       String s5="";   String sct=part.getContentType();   if(sct==null)
       {
         s="part无效";
         return s;
       }   ContentType ct=new ContentType(sct);
       if(ct.match("text/plain")||ct.match("text/html"))
       {
         s1=(String)part.getContent();
         return s1;
       }
       else if(partNum!=0)
       {
         return null;
       }   if(part.isMimeType("multipart/alternative"))
       {
         String s6="";
         String s7="";
         Multipart mp1=(Multipart)part.getContent();
         int count =mp1.getCount();
         for(int k=0;k<count;k++)
         {
           if(mp1.getBodyPart(k).isMimeType("text/plain"));
           s7=GetPart(mp1.getBodyPart(k),k,3,2);
           if(mp1.getBodyPart(k).isMimeType("text/html"));
           s6=GetPart(mp1.getBodyPart(k),k,3,1);
         }     if(x==1){s5=s6;}
         if(x==2){s5=s7;}
         return s5;   }
       s=s1;
       return s;
      }public String GetContent(Folder folder,int k)
    {
      try{
           String content=null;
           Message message[]=folder.getMessages();
           Object o=message[k].getContent();
           if(message[k].isMimeType("text/plain")||message[k].isMimeType("text/html"))
           {
             content=message[k].getContent().toString() + "ok";
             return content;
           }       else
           {         Multipart mp=(Multipart)o;
             int cnt=mp.getCount();
             String w=null;
             for(int j=0;j<cnt;j++)
             {            w=w  + GetPart(mp.getBodyPart(j),j,3,0);
             }         content=w;
             return content;
           }      // return content;
         }
         catch(Exception wyex7)
         {
           System.out.println(wyex7);
           return null;
       }
    }public String GetPart1(Part part,int partNum,int msgNum,int x) throws MessagingException,IOException
    {
       String w;
       String s="";
       String s1="";
       String s2="";
       String s3="";
       String s4="";
       String s5="";   String sct=part.getContentType();   if(sct==null)
       {
         s="part无效";
         return s;
       }   ContentType ct=new ContentType(sct);
       if(ct.match("text/plain")||ct.match("text/html"))
       {     return null;
       }
       else if(partNum!=0)
       {
         String temp="";
           if((temp=part.getFileName())!=null)
           {
    //         temp = new String(temp.getBytes("iso-8859-1"),"gb2312");
    //         Bity m=part.getFileName().getBytes();
             temp=MimeUtility.decodeText(temp);
             s2="附件:" + temp + "  大小:" + part.getSize();
             return s2;
            }
       }   if(part.isMimeType("multipart/alternative"))
       {
         String s6="";
         String s7="";
         Multipart mp1=(Multipart)part.getContent();
         int count =mp1.getCount();
         for(int k=0;k<count;k++)
         {
           if(mp1.getBodyPart(k).isMimeType("text/plain"));
           s7=GetPart(mp1.getBodyPart(k),k,3,2);
           if(mp1.getBodyPart(k).isMimeType("text/html"));
           s6=GetPart(mp1.getBodyPart(k),k,3,1);
         }     if(x==1){s5=s6;}
         if(x==2){s5=s7;}
         return s5;   }
       s=s2;
       return s;
      }