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

📄 emailtranslator.java

📁 JAVA邮件系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.util.Vector;
import java.io.FileOutputStream;
import java.io.*;
public class EmailTranslator
{
	Email      m_email;
	MailHeader MH;
	Vector     m_boundaryList;
	
	MailBuff   m_total;
	MailBuff   m_oneline;
	MailBuff   m_nextline;
	
	//for subject of mime extention.
	MailBuff   m_MimeSub;
	int        nSubBegin;
	int        nSubSize;
	boolean    bBase64;
	
	//item info;
	MailItem   m_curItem;
	boolean    m_bTransMailItem;
	byte       m_Encode;
	
	int        fileIndex;
	
	public EmailTranslator(){
	}
	public EmailTranslator(Email EM){
		setData(EM);
	}
	public boolean setData(Email EM){
		if(EM==null)
			return false;
		m_email =EM;
		MH = EM.GetMailHeader ();
		if(MH==null)
			return false;
		m_total =new MailBuff(EM.GetMailData());
		m_bTransMailItem = false;
		return true;
	}
	
	boolean getOneLine(){
		int nLineEnd =  m_total.FindLineEnd(0);
		if( nLineEnd == -1 )
			return false;
		m_oneline = m_total.MakeMirror(m_total.getOffset () ,nLineEnd-m_total.getOffset () );
		m_total.setOffset(nLineEnd+2);
		return true;
	}
	boolean getOneLineNotEmpty(){
		int nLineEnd =  m_total.FindLineEnd(0);
		if( nLineEnd == -1 )
			return false;
		m_oneline = m_total.MakeMirror(m_total.getOffset () ,nLineEnd-m_total.getOffset () );
		m_total.setOffset(nLineEnd+2);
		if(m_oneline.getSize ()==0 )
			return false;
		return true;
	}
	
	public static boolean gb_Translate( Email EM ){
		if( EM==null )
			return false;
		EmailTranslator ET = new EmailTranslator (EM);
		return ET.Translate (EM);
	}
	public static boolean gb_TranslateHeader( Email EM ){
		if( EM==null )
			return false;
		EmailTranslator ET = new EmailTranslator (EM);
		return ET.TranslateHeader (EM);
	}
	
	public boolean TranslateHeader( Email EM ){
		if( setData(EM) == false )
			return false;
		while( getOneLineNotEmpty() ){
			TranslateOneLine();
		}
		m_curItem = null;
		m_bTransMailItem = false;
		return true;
	}
	public boolean Translate( Email EM ){
		if( setData(EM) == false )
			return false;
		while( getOneLine() ){
			TranslateOneLine();
		}
		if( m_curItem!=null&&m_curItem.HaveContent () ){
			m_email.AddItem (m_curItem);			
		}
		m_curItem = null;
		m_bTransMailItem = false;
		return true;
	}
	
	boolean GetFrom(){
		int nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		int nEnd = m_oneline.FindKeyWordSplit(0);
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
	
		MH.SetFrom (new String( m_oneline.getData (),nKey, m_oneline.getSize ()));
		return true;
	}
	boolean GetTo(){
		int nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		int nEnd = m_oneline.FindKeyWordSplit(0);
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
	
		MH.SetTo (new String( m_oneline.getData (),nKey, m_oneline.getSize ()));
		return true;
	}
	boolean GetCc(){
		int nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		int nEnd = m_oneline.FindKeyWordSplit(0);
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
	
		MH.SetCc (new String( m_oneline.getData (),nKey, m_oneline.getSize ()));
		return true;
	}
	boolean CheckMimeExSubject(){
		MailBuff tempBuff=new MailBuff (m_oneline);
		if( tempBuff.BeginWithKeyword ("?")==false )
			return false;
		//charset
		int nOff = tempBuff.FindStr ("?",0);
		
		tempBuff.setOffset (nOff+1);
		//code type
		nOff = tempBuff.FindStr ("?",0);
		if( nOff ==-1)
			return false;
		
		tempBuff.setOffset (nOff+1);
		if( tempBuff.BeginWithKeyword ("b") )
			bBase64 =true;
		else
			bBase64 =false;
		//codes
		nOff = tempBuff.FindStr ("?",0);
		if( nOff ==-1)
			return false;
		
		tempBuff.setOffset (nOff+1);
		nSubBegin = nOff+1;
		
		//codes end
		nOff = tempBuff.FindStr ("?=",0);
		if( nOff ==-1)
			return false;
		nSubSize = nOff - nSubBegin;
		return true;
	}
	
	boolean GetMimeExSubject(){
		if( m_MimeSub==null)
			m_MimeSub = new MailBuff(1024,1024);
		MailBuff backMB = new MailBuff(m_total);
		
		byte[] sSubLine=new byte[1024];
		int    nDecode;
		if( bBase64 ){
			Base_64Coding B64 = new Base_64Coding();
			nDecode = B64.Decode ( m_oneline.getData (),sSubLine,nSubSize,
								   nSubBegin,0);
		}
		else{
			Ascii_7Coding A7 = new Ascii_7Coding();
			nDecode = A7.Decode ( m_oneline.getData (),sSubLine,nSubSize,
								   nSubBegin,0);
			
		}
		m_MimeSub.append (sSubLine,0,nDecode);
		while( getOneLine() ){
			if( CheckMimeExSubject()==false )
				break;
			if( bBase64 ){
				Base_64Coding B64 = new Base_64Coding();
				nDecode = B64.Decode ( m_oneline.getData (),sSubLine,nSubSize,
									   nSubBegin,0);
				m_MimeSub.append (m_oneline.getData (),0,nDecode);
			}
			else{
				Ascii_7Coding A7 = new Ascii_7Coding();
				nDecode = A7.Decode ( m_oneline.getData (),sSubLine,nSubSize,
									   nSubBegin,0);
				m_MimeSub.append (sSubLine,0,nDecode);
			}
		}
		m_total = new MailBuff(backMB);
		MH.SetSubject (new String( m_MimeSub.getData (),0,m_MimeSub.getSize ()));
		return true;	
	}
	
	boolean GetSubject(){
		int nKey = m_oneline.FindKeyWord(0);
		if( nKey==-1 )
			return false;
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		int nEnd = m_oneline.FindKeyWordSplit(0);
		if( nEnd==-1 )
			return false;
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		if( nKey==-1 )
			return false;
		m_oneline.Offset (nKey-m_oneline.getOffset ());
	
		if( CheckMimeExSubject()==false )
			MH.SetSubject (new String( m_oneline.getData (),nKey, m_oneline.getSize ()));
		else{
			GetMimeExSubject();
		}
			
		return true;
	}
	boolean GetItemName(){
		String sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
		int nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		int nEnd = m_oneline.FindKeyWordSplit(0);
		if( nEnd==-1 )
			return false;
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		
		if( m_curItem==null )
			return false;
		String sName = new String( m_oneline.getData (),nKey, m_oneline.getSize ());
		if( sName.length ()>1 && sName.charAt (0)=='\"'
		   && sName.charAt (sName.length ()-1)=='\"')
			m_curItem.SetContentName( sName.substring (1,sName.length ()-1) ); 
		else
			m_curItem.SetContentName( sName );
		
		if( m_curItem.GetContentName ().length ()<1)
			m_curItem.SetContentName (null);
		else{
			MailBuff tempMB;
			if( ( tempMB=CheckMimeExText(m_curItem.GetContentName()
						.getBytes ()) )
				!=null ){
				m_curItem.SetContentName(GetMimeExText(tempMB));
			}
			
		}	
		return true;
	}
	
	boolean GetContentEncode(){
		int nKey = m_oneline.FindKeyWord(0);
		int nEnd;
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		nEnd = m_oneline.FindKeyWordSplit(0);
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		
		if( m_curItem!=null ){
			if( m_oneline.BeginWithKeyword("base64") )
			   m_curItem.SetEncodeType (MailItem.ENCODE_TYPE_BASE64 );
			else if( m_oneline.BeginWithKeyword("quoted-printable") )
				m_curItem.SetEncodeType (MailItem.ENCODE_TYPE_PRINT );
			else
				m_curItem.SetEncodeType (MailItem.ENCODE_TYPE_NORMAL );
		}
		else{
			if( m_oneline.BeginWithKeyword("base64") )
			   m_Encode = (MailItem.ENCODE_TYPE_BASE64 );
			else if( m_oneline.BeginWithKeyword("quoted-printable") )
				m_Encode = (MailItem.ENCODE_TYPE_PRINT );
			else
				m_Encode = (MailItem.ENCODE_TYPE_NORMAL );
			
		}
		return true;
	}
	
	boolean GetContentType(){
		String sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());

		int nKey = m_oneline.FindKeyWord(0);
		int nEnd;
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
		nEnd = m_oneline.FindKeyWordSplit(0);
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
		nKey = m_oneline.FindKeyWord(0);
		m_oneline.Offset (nKey-m_oneline.getOffset ());
		sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());

⌨️ 快捷键说明

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