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

📄 jmail.java

📁 Java邮箱
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package Email.awt.net;

//运行主程序
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import Email.net.*;
import Email.awt.event.*;
import Email.awt.net.*;
import Email.awt.*;

//注意java.util中也有List函数
public class JMail extends WinFrame{
  private File saveState;
  
  private ChoiceCardPanel folderViews;     //选择面板
  private Hashtable folders;               //邮件用Hashtable保存
  private SMTPwConfig smtp;
  private POP3wConfig pop3;

  private PreviewEmailPanel preview;
  private SMTPPOP3Config    smtpPop3Config;
  private FilterConfig      filterConfig;
  private DateConfig        dateConfig;

  private final static String Inbox = "Inbox";
  private final static String Outbox = "Outbox";
  private final static String SentItems = "Sent Items";

  private Button newMsgButton = new Button("New message");
  private Button replyToButton = new Button("Reply to");
  private Button replyToAllButton = new Button("Reply to all");
  private Button forwardButton = new Button("Forward");
  private Button sendXcvButton = new Button("Send & receive");
  private Button deleteButton = new Button("Delete");

  private Mailbox mailbox;
  ItemListener enableButtonsListener;

  //发送&接收邮件
  final void sendXcv(){
  	//取得当前过滤设置
  	
    String add_Filter = filterConfig.Adress_Filter;
    String sub_Filter = filterConfig.Subject_Filter;
    
    try  {
      Vector outbox = (Vector) folders.get(Outbox);
      if ( smtp.sendMail( this,outbox.elements() ) )  {
        for (int i = 0; i < outbox.size(); i++)
          addToFolder( SentItems,(Email)outbox.elementAt(i) );     //发送邮件:邮件从outbox中移到SentItems中
        outbox.removeAllElements();
        ( (java.awt.List) folderViews.getItem(Outbox) ).removeAll();
       }
 
      Vector incoming = pop3.readMail( this,false );               //true:服务器端邮件删除。false:服务器端邮件不删除
      for ( int i = 0; i < incoming.size(); i++ ){
        Email email = ( Email )incoming.elementAt(i);
        String From = email.getFrom();
        String Sub  = email.getSubject();
        if( add_Filter.equals("") && sub_Filter.equals("") )       //过滤设置为空
            addToFolder( Inbox,email );                            //接收邮件:邮件添加到Inbox中
        else if ( add_Filter.equals("") && !sub_Filter.equals("") && !filters( Sub, sub_Filter ) )
            addToFolder( Inbox,email );
        else if ( !add_Filter.equals("") && sub_Filter.equals("") && !filters( From, add_Filter ) )
            addToFolder( Inbox,email );
        else if( !add_Filter.equals("") && !sub_Filter.equals("") && !filters( From, add_Filter ) && !filters( Sub, sub_Filter ) )
            addToFolder( Inbox,email );
        }  
    } 
    catch (Exception e) {
      new WinFrame("Sending and Receiving Email",e);
    }
  }

  private final void enableButton(Button b, boolean enabled){
    if (b.isEnabled() != enabled)
      b.setEnabled(enabled);
  }

  //根据邮箱文件夹选项来设定按钮是否可显示
  
  final void enableButtons() {                          
    Email email = getSelectedEmail();
    preview.preview(email);
    if ( email == null ) {
      enableButton(replyToButton,false);
      enableButton(replyToAllButton,false);
      enableButton(forwardButton,false);
      enableButton(deleteButton,false);
    }
    else {
      String folder = folderViews.getSelectedItem();    //判断邮箱文件夹选项
      if ( folder.equals(Outbox) )  {
        enableButton(replyToButton,false);
        enableButton(replyToAllButton,false);
        enableButton(forwardButton,true);
        enableButton(deleteButton,true);
      }
      else {
        enableButton(replyToButton,true);
        enableButton(replyToAllButton,true);
        enableButton(forwardButton,true);
        enableButton(deleteButton,true);
      }
    }
    invalidate();
  }


  //根据选项判断发件箱,收件箱
  final public Email getSelectedEmail() {
    try {
      int folderIdx = folderViews.getSelectedIndex();       
      java.awt.List folderList = ( java.awt.List ) folderViews.getItem(folderIdx);
      int folderListIdx = folderList.getSelectedIndex();
      String folder = folderViews.getSelectedItem();       //邮件箱名(Inbox,OutBox,Sent Items)
      Vector letters = (Vector) folders.get(folder);
      return (Email) letters.elementAt(folderListIdx);     //返回选定的邮件
     } 
    catch ( Exception e ) { }
    return null;
  }
  
  //预览邮件
  final public void viewSelectedEmail() {
    Email email = getSelectedEmail();
    if ( email == null )
      return;
    if ( folderViews.getSelectedItem().equals(Outbox) )
      new ComposeEmail( email.getSubject(),mailbox,email ).setVisible(true);
    else
      new ViewEmail( mailbox,email ).setVisible(true);
  }

  final protected void addFolder(String folder){
    if ( !folders.containsKey(folder) )  {
      java.awt.List letterList = new java.awt.List();
      letterList.addActionListener
        (
          new ActionAdapter() {
            public void actionPerformed( ActionEvent e ) { 
              viewSelectedEmail(); 
              }
          }
        );
      letterList.addItemListener(enableButtonsListener);
      folderViews.add(folder, letterList);
      folders.put( folder,new Vector() );
    }
  }

  final protected void removeFolder(String folder) {
    if ( folders.containsKey(folder) && !folder.equals(Inbox) && !folder.equals(Outbox) && !folder.equals(SentItems) ){
      folderViews.remove(folder);
      folders.remove( folders.get(folder) );
    }
  }

  private final static String spaces = new String ("                                                          ");

  private final static void appendField(StringBuffer out, String field, int width){
    if ( field.length() < width ) {
      out.append( field ); 
      out.append( spaces.substring( 0,width - field.length() ) );  //控制选择菜单空白区长度
    }
    else
      out.append( field.substring(0,width) );
  }

  //根据时间段显示邮件
  final public void addToFolder(String folder, Email email){      //folder为邮箱名,email为邮件
    //System.out.println( " folder = " + folder );
    String start_time = dateConfig.start_date;
    String end_time = dateConfig.end_date;
    if( start_time.equals("") )     start_time = "11111111";      //当开始时间为空,定义为无限小
    if( end_time.equals("") )       end_time   = "99999999";      //结束时间为空,定义为无限大
    
    int s_Time =  Integer.parseInt( start_time );
    int e_Time =  Integer.parseInt( end_time );
    if ( !folders.containsKey(folder) )
      addFolder(folder);
    if ( folders.containsKey(folder) ){
      java.awt.List letterList = (java.awt.List) folderViews.getItem(folder);
      Vector letters = (Vector) folders.get(folder);
      //System.out.println( " letters = " + letters );
      if ( letters.contains(email) )  {
        int letterIdx = letters.indexOf(email);
        letters.removeElementAt(letterIdx);
        letterList.remove(letterIdx);
      }
      letters.addElement(email);
      StringBuffer item = new StringBuffer();
      //System.out.println("item = " + item );
      if ( folder.equals(Outbox) || folder.equals(SentItems) ){
        appendField( item,email.getToAsString(),50 );         //设置收件人 
        appendField( item,email.getSubject(),50 );
        appendField( item,formatTime( email.getDate() ),50 );
        letterList.add( item.toString() );
        }
      else {  //在此设置时间范围
      	int email_Time = intTime( email.getDate() );
      	if( ComDate( s_Time ,email_Time ) && ComDate( email_Time ,e_Time ) ){ //再在时间范围内,则显示	
             appendField( item,email.getFrom(),50 );
             appendField( item,email.getSubject(),50 );
             appendField( item,formatTime( email.getDate() ),50 );
             letterList.add( item.toString() );
           }    
        }
    }
  }
 
 public int intTime( String str ){
 	   String Y,M,D;
 	   if( str.length() == 30 ){
 	       Y = str.substring(11,15);
	       M = GetMonth( str.substring(7,10) );
	       D = "0" + str.substring(5,6);
	   }
	   else{
	   	   Y = str.substring(12,16);
	       M = GetMonth( str.substring(8,11) );
	       D = str.substring(5,7);
	   }
	   String intDate = Y + M + D;
	   int Day;
	   Day = Integer.parseInt( intDate );
	   return Day;
    }

 public boolean ComDate(int Date1, int Date2) { //时间比较
		if (Date1 <= Date2)
			return true;
		else
			return false;
	}


 public String formatTime( String str ){  //字符串转化成时间
	   //String str =  "Thu, 21 Jul 2005 10:54:51";
	   //String str1 = "Thu, 21 Jul 2005 10:53:09 +0800";
	   String y,m,d,h;
	   if( str.length() == 30 ){
	       y = str.substring(11,15);
	       m = GetMonth( str.substring(7,10) );
	       d = "0" + str.substring(5,6);
	       h = str.substring(16,21);  
	   }
	   else{
	       y = str.substring(12,16);
	       m = GetMonth( str.substring(8,11) );
	       d = str.substring(5,7);
	       h = str.substring(17,22); 
	   }
	   String time = y + "-" + m + "-" + d + " " + h ;
       return time;
    }
  
   public String GetMonth(String Month) {
		if (Month.equals("Jan")) {
			return "01";
		}
		if (Month.equals("Feb")) {
			return "02";
		}
		if (Month.equals("Mar")) {
			return "03";
		}
		if (Month.equals("Apr")) {
			return "04";
		}
		if (Month.equals("May")) {
			return "05";
		}
		if (Month.equals("Jun")) {
			return "06";
		}
		if (Month.equals("Jul")) {
			return "07";
		}
		if (Month.equals("Aug")) {
			return "08";
		}
		if (Month.equals("Sep")) {
			return "09";
		}
		if (Month.equals("Oct")) {
			return "10";
		}
		if (Month.equals("Nov")) {
			return "11";
		}
		if (Month.equals("Dec")) {
			return "12";
		}
		else
			return "";
	}

  final private void addFolders(Hashtable folders){  //用Hashtable来存储所有邮件信息
    Enumeration folderNames = folders.keys();
    while ( folderNames.hasMoreElements() )  {
      String folderName = (String) folderNames.nextElement();
      addFolder(folderName);
      Enumeration letters = ( (Vector)folders.get(folderName) ).elements();
      while ( letters.hasMoreElements() )
         addToFolder( folderName,(Email)letters.nextElement() );
    }
  }


  public void removeFromFolder (String folder, Email email){
    if (folders.containsKey(folder)) {
      java.awt.List letterList = (java.awt.List) folderViews.getItem(folder);
      Vector letters = (Vector) folders.get(folder);
      if ( letters.contains(email) ) {
        int letterIdx = letters.indexOf(email);
        letters.removeElementAt(letterIdx);
        letterList.remove(letterIdx);
      }
    }
  }

⌨️ 快捷键说明

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