⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receivemail.java

📁 一个学习程序
💻 JAVA
字号:
package WebMail;

/**
 * <p>Title: 企业邮箱管理系统</p>
 * <p>Description: 收发邮件_收邮件Bean</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 南京仕邦有限公司</p>
 * @author W.L.B
 * @version 1.0
 */

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
import javax.activation.*;

public class receiveMail {
public int numberOfTatol = 0;
public int numberOfUnread= 0;
public int numberOfNewMail = 0;
public String[] attachFilename = new String[10];
public String[] mailTo = new String[10];
public String[] html = new String[10];

private Message[] messages;
private Folder folder;
private Session session;
private URLName ServerUrlName;
private javax.mail.Store str;

private boolean IsGBCode;


public receiveMail() {

}

public int receive(String usr,String pass, String Host)
{
    return recieve(usr,pass,Host);
}

public int recieve(String usr,String pass,String Host)
{
  String Server ="pop3://";
  Server +=usr.trim()+":"+pass.trim()+"@"+Host.trim()+"/INBOX";
  try
  {
    ServerUrlName=new URLName(Server);
    Properties props=new Properties();
    session=Session.getInstance(props,null);
    str = session.getStore("pop3");
    folder=session.getFolder(ServerUrlName);
    if (folder == null)
    {
      println("Not Found Folder:"+Server);
      return -1;
    }
    else
    {
      folder.open(Folder.READ_WRITE);
      //邮件的总数
      numberOfTatol   = folder.getMessageCount();
      numberOfUnread  = folder.getUnreadMessageCount();
      numberOfNewMail = folder.getNewMessageCount();
      messages = folder.getMessages();

       //开辟邮件的总数个附件名称的String数组(空间)
      attachFilename = new String[numberOfTatol];
      html           = new String[numberOfTatol];
      for( int i = 0;i<html.length;i++)
         html[i] = "h";
      if(messages.length==0)  //NO EMAIL
      {
        print("Your Folder Not New EMAIL " );
        folder.close(true);
        str.close();
        return 1;
      }
      return 0;
    }
  }
  catch(Exception e)
  {
    print("ERROR :"+e.getMessage());
    return -2;
  }
}
/**
 * <P>得到邮件的主题</p>
 */
public String GetSubject(int count)
{
  return getsubject(count);
}

public String getsubject(int count)
{
  boolean bgetstr;
  String temps;
  String[] ta1=null;
  String _subject="无主题";
  try
  {
    ta1 = messages[count].getHeader("Subject");
  }
  catch(Exception ex)
  {
    return _subject;
  }

  if (ta1 != null)
    _subject=ta1[0];
  else
    _subject="";

  if (_subject.indexOf("=?GB2312")!=-1 || _subject.indexOf("=?GBK")!=-1 || _subject.indexOf("=?utf-8")!=-1)
  {
    bgetstr=false;
    IsGBCode=false;
    _subject = Mytool.toChinese(_subject,"gb2312");
  }
  else
  {
    bgetstr=true;
    _subject = Mytool.toChinese(_subject,"ISO8859-1");
  }

  try
  {
    temps = MimeUtility.decodeText(_subject);
  }
  catch(UnsupportedEncodingException E)
  {
    return _subject;
  }

  if (temps.length()==0)
  {
    temps="(无主题)";
    bgetstr=false;
  }
  //QP 解码
  //temps = Mytool.Ucode_QP(temps);
  if (bgetstr==false)
  {
    if (temps.lastIndexOf("B2312") !=-1)
      temps=Mytool.getStr(temps);
    return temps;//=Mytool.Ucode_QP(temps);
  }
  else
    return temps ;
}
/**
 * <p>得到邮件的大小</p>
 */
public String GetSize(int count)
{
  float size =0;
  String strsize="";
  try
  {
    size = messages[count].getSize();
    if ((size/1000000)>1)
    {
      size = size/1000;
      strsize = size + "M" ;
    }
    else
    {
      size = size/1000;
      strsize = size + "K" ;
    }
    return strsize ;
  }
  catch(Exception ex){

    printErr(count,"Get Mail Size Error "+ex.toString());
    return "";
  }
}
/**
 *  <p>得到发件人</P>
 */
public String Getaddress(int count)
{
  String str ="";
  String str1="";
  String str2="";
  try
  {
    str = (InternetAddress.toString(messages[count].getFrom() ));
    str1 = findEmailAddress(str);
    str2 = getEmailName(str);
    str = Mytool.toChinese(str1,"ISO8859-1");
    return str;
  }
  catch(Exception ex)
  {
    return "Get From Err ...";
  }
}

public String getEmailName(String str)
{
  try
  {
    int foreindex=str.indexOf("<");
    if(foreindex!=-1)
      str=str.substring(0,foreindex);
    return str;

  }
  catch(Exception e)
  {
    return str;
  }
}


public String findEmailAddress(String str)
{
  try
  {
    int foreindex=str.indexOf("<");
    int backindex=str.indexOf(">");
    if(foreindex!=-1&&backindex!=-1)
      str=str.substring(foreindex+1,backindex);
    return str;
  }
  catch(Exception e)
  {
    return str;
  }
}

public String GetFrom(int count)
{
  return Getaddress(count);
}
/*
 *  <p>得到发件日期</p>
 */
public String GetRecievedDate(int count)
{
  try
  {
    return messages[count].getSentDate().toString();
  }
  catch(Exception ex)
  {
    print("Get Date Err ...");
    return "";
  }
}
/**
 *<p>判断是否是HTML 类型</p>
 * */
public boolean IsHTML(int count)
{
   boolean b = false;
   if (html[count].trim() =="HTML")
     b = true;
   return b;
}

/**
 * <p> 判断是否有附件</p>
 * */
public boolean Isattach(int count)
{
  boolean b = false;
  try
  {
    Part Msgport = messages[count];
    Object body = Msgport.getContent();
    //messages[count].setFlag(Flags.Flag.SEEN,true);
    javax.mail.Multipart mp=(Multipart)body;

    attachFilename[count]="";
    for ( int i =1;i<mp.getCount();i++)
    {
      Part part = mp.getBodyPart(i);
      //String dis = part.getDescription();
      //    if ((dis != null) && (
      //       (dis.equals(Part.ATTACHMENT)||(dis.equals(Part.INLINE)))))

      if (mp.getBodyPart(i).getFileName() != null)
      {
        attachFilename[count] += mp.getBodyPart(i).getFileName()+";";
        b = true;  // 有附件
      }
    }
  }
  catch(ClassCastException CCEx)
  {
  }
  catch(UnsupportedEncodingException Eex)
  {
    printErr(count,Eex.toString());
  }
  catch(Exception ex)
  {
    printErr(count,ex.toString() );
  }
  return b;
}
/**
 *  <p> 得到正文 </p>
 * */
public String GetBody(int count)
{
  String sstr="";
  try
  {
    Object body = messages[count].getContent();

    //if( messages[count].getContentType().indexOf("text") ==0)
    //  sstr = process(messages[count],count);
    //else
      sstr = process((Multipart)body,count);
  }
  catch(Exception ex)
  {

  }
  //sstr = Mytool.Ucode_QP(sstr);
  //sstr = Mytool.getStr(sstr);
  return sstr;
}
/**
 * <p> 将附件存到目录</p>
 * */
public void Getattach(int count,String filepath)
{
  try
  {
    Object body=messages[count].getContent();
    //filepath = Mytool.getStr(filepath);
    processMulti((Multipart)body,count,filepath);
  }
  catch(Exception ex)
  {
    printErr(count,"Get Attach Err "+ex.toString() );
  }
}
/* *
 *  <p> 正文</p>
 */
public String process(Part p,int cnt)
{
  String str ="";
  boolean isQP = false;
  try
  {
    if (p.getContentType().indexOf("text/html") !=-1)
      html[cnt] ="HTML";
    com.sun.mail.util.ASCIIUtility utl= null;
    InputStream is =p.getInputStream();
    byte[] bb = null;

    bb = utl.getBytes(is);
    str= new String(bb);
    // 是否是quoted-printable 编码
    if (str.indexOf("quoted-printable") !=-1)
    {
      str = Mytool.Ucode_QP(str);
      str = Mytool.toChinese(str,"ISO8859-1");
    }
      /*
      while (thisLine!=null)
      {
      str = str + thisLine +"\r\n";
      //
      thisLine=reader.readLine();
      }
      */

      //  gg = Mytool.toChinese(gg,"gb2312");
      //print(str);
    return str;
  }
  catch(Exception ex)
  {
   printErr(cnt, "Get Body Err "+ex.toString() );
   return "";
  }
}

/**
 *   <p> 附件名 </p>
 */
public String[] GetattachFilename(int cnt)
{
  String[] aa = new String[1];
  //attachFilename[cnt] =attachFilename[cnt].substring(0,attachFilename[cnt].length()-1);
  if (attachFilename[cnt].endsWith(";"))
    attachFilename[cnt] =attachFilename[cnt].substring(0,attachFilename[cnt].length()-1);
  Object[] objArr = Mytool.separateFileName(attachFilename[cnt],';');
  aa = new String[objArr.length];
  for (int i =0 ;i<objArr.length;i++)
  {
    if ((String)objArr[i] != null)
    {
    aa[i] = (String)objArr[i];
    }
  }
  return aa;
}
/**
 * <p> 附件 </p>
 * */
public String processMulti(Multipart p,int cnt,String filepath)
{
  String str ="";
  try
  {
    for (int j=1;j< p.getCount();j++)
    {
      String filename = p.getBodyPart(j).getFileName();
      if (filename == null)
        str = "";
      else if (filename != null)
      {
        System.out.println("文件为A:"+filename);

       //if (filename.indexOf("??") == 0 )
       //filename = Mytool.getStr(filename);
       // else
         filename = Mytool.getStr(filename);
         System.out.println("文件为B:"+filename);

         File f = new File(filepath);

         System.out.println("目录为:"+filepath);
        filepath = f.getAbsolutePath();

        System.out.println("虚拟目录为:"+filepath);

        File attchFile = new File(filepath);
        attchFile.mkdirs();
        try
        {
          attchFile = new File(filepath,filename);
          //if(attchFile.exists())
        InputStream is =p.getBodyPart(j).getInputStream();
        FileOutputStream out = new FileOutputStream(attchFile);
        while( is.available()>0)
        {
          out.write(is.read() );
        }
        is.close();
        out.close();
        }
       catch(Exception ex)
       {
         attchFile = new File(filepath,filename);
         InputStream is =p.getBodyPart(j).getInputStream();
         FileOutputStream out = new FileOutputStream(attchFile);

         while( is.available()>0)
         {
           out.write(is.read() );
         }
         is.close();
         out.close();
       }
      }
    }
    return str;
  }
  catch(Exception ex)
  {
    printErr(cnt,"Get Att Err "+ex.toString() );
    return str;
  }
}

public String process(Multipart p,int cnt)
{
  String str ="";
  try
  {
    for (int j=0;j< p.getCount();j++)
    {
      String filename = p.getBodyPart(j).getFileName();
      if (filename == null)
        str = process(p.getBodyPart(j),cnt);
    }
    return str;
  }
  catch(Exception ex)
  {
    return "";
  }
}
/**
 *  <p>设置Delete 标志 </p>
 */
public void setFlagDelete(int count)
{
  try
  {
    messages[count].setFlag(Flags.Flag.DELETED,true);
    //closefolder();
  }
  catch(Exception Ex)
  {
    print("Delete Mail Err :"+Ex.getMessage());
  }
}

public void setFlagRreaded(int count)
{
  try
  {
    messages[count].setFlag(Flags.Flag.FLAGGED,true);

//closefolder();
  }
  catch(Exception Ex)
  {
    print("Readed Mail Err :"+Ex.getMessage());
  }
}

public void setFlagDelete(int count,String str)
{
  String path="";
  String pathf="";
  if (str.trim() =="") return ;
  try
  {
    //得到当前目录
    File s = new File("ss");
    String p = s.getAbsolutePath();

    p = p.substring(0,p.lastIndexOf("\\"));
    str= p+"\\"+str;
    print("current path: "+str);
    java.io.File f = new java.io.File(str);

    if (f.exists())
    {
      path = str.substring(0,str.lastIndexOf("\\"));
      pathf= path.substring(path.lastIndexOf("\\"));
      path = path.substring(0,path.lastIndexOf("\\"));
      int cnt = f.list().length;
      String[] newf = new String[cnt];
      for(int i=0;i< cnt;i++)
        newf[i]=f.list()[i].toString();
      for(int i=0;i< cnt;i++)
      {
        java.io.File ff = new java.io.File(str,newf[i]);
        if (ff.exists())
          System.out.println("file delete: "+ff.delete());

      }
      System.out.println(path);
      System.out.println(pathf);
      java.io.File fff = new java.io.File(path,pathf);
      if (fff.exists())
         System.out.println("path delete: "+fff.delete());
    }

   setFlagDelete(count);
  }
  catch(Exception Ex)
  {
    print(Ex.toString());
  }

}

public void CloseFolder()
{
  try
  {
   folder.close(true);
  }
  catch(Exception ex)
  {
    print("CloseFolder Err :"+ex.toString());
  }
}

public void print(String str)
{
  System.out.println(str);
}


public void println(String str)
{
  print(str);
}
public void printErr(int cnt,String str)
{
  System.out.println("第【"+cnt+"】封邮件有错: "+str+"");

}
/////////////////////////
public void ReopenFolder()
{
  try
  {
  //folder=session.getFolder(ServerUrlName);
  folder.open(Folder.READ_WRITE);
  }
  catch(Exception ex)
  {

  }
}
//////////////////////////////////


public static void main(String args[])
   {

     receiveMail recmail = new receiveMail();
     int intMsg = 0;
     //popserver是:pop3://name:password@tech.hiaward.com/INBOX  Draft

     intMsg = recmail.recieve("woo","asdc","hiaward.com");
     System.out.println("    共有邮件:"+recmail.numberOfTatol+"件" );
     System.out.println("共有未读邮件:"+recmail.numberOfUnread+"件" );
     System.out.println("  共有新邮件:"+recmail.numberOfNewMail+"件" );

     for (int i=1;i<=recmail.numberOfTatol;i++)
     {
       System.out.print("第<"+i+">封邮件:");
       System.out.print(" 发 件 人  :"+recmail.Getaddress(i-1));
       System.out.print("  主  题   :"+recmail.getsubject(i-1));
       System.out.print(" 接收 时间 : "+recmail.GetRecievedDate(i-1));
       //  System.out.print(" 文件大小 : "+recmail.GetSize(i-1));

       System.out.println();
       System.out.println(" 正     文 : ");
       System.out.print(recmail.GetBody(i-1));
       System.out.println(recmail.IsHTML(i-1)+"HTML");
       System.out.print(" 是否有附件: "+recmail.Isattach(i-1));
       if (recmail.Isattach(i-1))
       {
         for (int aa=0;aa<recmail.GetattachFilename(i-1).length;aa++)
           System.out.print(" 个附件 名为    : "+recmail.GetattachFilename(i-1)[aa]);
         recmail.Getattach(i-1,"d\\d\\daa\\发d发\\");
       }

       System.out.println();
     }
     // recmail.setFlagDelete(1,"d\\d\\daa\\发d发\\") ;
     recmail.setFlagRreaded(0);
     // recmail.CloseFolder();
     // recmail.ReopenFolder();
   }




//End
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -