📄 jmail.java
字号:
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 + -