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

📄 emailtranslator.java

📁 JAVA邮件系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		nEnd = m_oneline.FindKeyWordSplit(0);

		if( m_curItem!=null ){
			if( m_oneline.BeginWithKeyword("text/plain")&&(m_email.GetItemNum ()==0) )
				m_curItem.SetContentType(MailItem.CONTENT_TYPE_PLAIN); 
			else
				m_curItem.SetContentType(MailItem.CONTENT_TYPE_ATTCH); 
		}
		if( nEnd <= 0 )
			return true;
		m_oneline.Offset (nEnd-m_oneline.getOffset ());
		sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
		
		if( m_curItem==null ){//check boundary
			int nBound = m_oneline.FindStrNocase (MimeKeyword.sBoundary,0);
			if( nBound==-1 )
				return true;
			m_oneline.Offset (nBound -m_oneline.getOffset ());
			sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
			GetBoundary();
		}
		if( m_curItem!=null ){//get item name;
			int nName = m_oneline.FindStrNocase (MimeKeyword.sContentName,0);
			if( nName==-1 )
				return true;
			m_oneline.Offset (nName -m_oneline.getOffset ());
			sTemp = new String(m_oneline.getData (),
								  m_oneline.getOffset (),
								  m_oneline.getSize ());
			GetItemName();
		}
		
		return true;
	}
	
	int FindItemEnd(){
		String sBound;
		while( getOneLine() ){
			if( m_boundaryList!=null){
				for( int i=0;i<m_boundaryList.size ();i++ ){
					sBound = (String)m_boundaryList.elementAt (i);
					if( m_oneline.BeginWithKeyword ( sBound ) ){
						//boundary;
						m_total.setOffset(m_oneline.getOffset());
						return m_oneline.getOffset();
					}
				}
			}
			if( m_oneline.BeginWithKeyword(".\r\n") )
				return m_oneline.getOffset();
		}
		return m_oneline.getOffset();
	}
	
	boolean GetItemContent(){
		int nBegin = m_oneline.getOffset();
		int nEnd = FindItemEnd();
		byte[] sOut = new byte[nEnd-nBegin];
		
		Encodeing Encode;
		byte nEncodeType= m_curItem.GetEncodeType ();
		if( nEncodeType==MailItem.ENCODE_TYPE_BASE64 ){
			Base_64Coding b64 = new Base_64Coding();
			Encode = b64;
		}
		else if( nEncodeType==MailItem.ENCODE_TYPE_PRINT ){
			Ascii_7Coding A7 = new Ascii_7Coding();
			Encode = A7;
		}
		else{
			NormalCoding Nc=  new NormalCoding();
			Encode = Nc;
		}
		int nDecode = Encode.Decode (m_oneline.getData (),sOut,nEnd-nBegin,nBegin,0);	   
		m_curItem.SetContentOut(sOut);
		m_curItem.SetContentOutLength(nDecode);
		return true;
	}
	
	boolean GetBoundary(){
		if( m_boundaryList==null )
			m_boundaryList = new Vector(5,5);		
		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 ());
		nEnd = m_oneline.FindBoundarySplit(0);
		if(nEnd == -1)
			nEnd = m_oneline.getSize ()+m_oneline.getOffset ();
		
		MailBuff tempBuff = new MailBuff(1024,1024);
		tempBuff.append ("--");
		byte[] bBound = m_oneline.getData ();
		if( bBound[m_oneline.getOffset()]=='\"'&&
		    bBound[nEnd-1]=='\"'){
			tempBuff.append (m_oneline.getData (),m_oneline.getOffset()+1,
						 nEnd-m_oneline.getOffset()-2);
		}else{
			tempBuff.append (m_oneline.getData (),m_oneline.getOffset(),
						 nEnd-m_oneline.getOffset());
		}
		String sBound = new String(tempBuff.getData (),0,tempBuff.getSize ());
		m_boundaryList.addElement (sBound);
		return true;
	}
	
	boolean nextIsMimeText()
	{
		MailBuff temp=new MailBuff (m_total);
		int nLineEnd =  temp.FindLineEnd(0);
		if( nLineEnd == -1 )
			return false;
		m_nextline = m_total.MakeMirror(m_total.getOffset () ,nLineEnd-m_total.getOffset () );
		if( m_nextline.BeginWithKeyword ( MimeKeyword.sMimeTxt ) )
			return true;
		return false;
	}
	
	boolean TranslateOneLine(){
		if( m_oneline.getSize ()==0  ){//empty line
			if( nextIsMimeText()==true ){
			}
			else if( m_bTransMailItem == false ){
				m_bTransMailItem =true;
				m_curItem = new MailItem ();
				m_curItem.SetEncodeType(m_Encode); 
			}
			else {
				if( m_curItem.GetContentOut ()==null ){
					GetItemContent();
				}
			}
			return true;
		}
		if( m_boundaryList!=null){
			for( int i=0;i<m_boundaryList.size ();i++ ){
				if( m_oneline.BeginWithKeyword ( (String)m_boundaryList.elementAt (i) ) ){
					//boundary;
					if( m_curItem==null )
						m_curItem = new MailItem ();
					if( m_curItem.HaveContent() ){
						m_email.AddItem (m_curItem);
					}
					m_curItem = new MailItem ();
					m_curItem.SetEncodeType(m_Encode); 
					return true;
				}
			}
		}
		if( m_oneline.BeginWithKeyword (".\r\n") ){
			if( m_curItem.HaveContent() ){
				m_email.AddItem (m_curItem);
			}
		}
		if( m_bTransMailItem==false ){
			if( MimeKeyword.IsReturnPath (m_oneline) ){
				return true;
			}
			if( MimeKeyword.IsMessageID (m_oneline) ){
				return true;
			}
			if( MimeKeyword.IsFrom (m_oneline) ){
				GetFrom();
				return true;
			}
			if( MimeKeyword.IsTo (m_oneline) ){
				GetTo();
				return true;
			}
			if( MimeKeyword.IsSubject (m_oneline) ){
				GetSubject();
				return true;
			}
			if( MimeKeyword.IsDate (m_oneline) ){
				GetDate();
				return true;
			}
			if( MimeKeyword.IsVersion (m_oneline) ){
				return true;
			}
			if( MimeKeyword.IsCc (m_oneline) ){
				GetCc();
				return true;
			}
			if( MimeKeyword.IsReplyTo (m_oneline) ){
				return true;
			}
		}
		if( MimeKeyword.IsContentEncode (m_oneline) ){
			GetContentEncode();
			return true;
		}
		if( MimeKeyword.IsContentType (m_oneline) ){
			GetContentType();
			return true;
		}
		if( MimeKeyword.IsCharset (m_oneline) ){
			return true;
		}
		if( MimeKeyword.IsStatus (m_oneline) ){
			return true;
		}
		if( MimeKeyword.IsBoundary (m_oneline) ){
			GetBoundary();
			return true;
		}
		if( MimeKeyword.IsContentName (m_oneline) ){
			GetItemName();
			return true;
		}
		if( MimeKeyword.IsFileName (m_oneline) ){
			return true;
		}
		if( MimeKeyword.IsMimeTxt (m_oneline) ){
			return true;
			
		}
		return true;
	}
	
	boolean WriteToDisk(){
		fileIndex ++;
		StringBuffer sFile = new StringBuffer("f:"+File.separatorChar +"TmpFile");
		sFile.append (fileIndex);
		sFile.append (".txt");
		
		if( sFile==null||sFile.length () == 0 )
			return false;
		
		try{
			FileOutputStream tempFS = new FileOutputStream (sFile.toString ());
			int nDataLength = m_curItem.GetContentOutLength() ;
			tempFS.write (m_curItem.GetContentOut(),0,nDataLength);
			tempFS.close ();
		}
		catch( Exception e){
			return false;
		}
				
		return true;
		
	}
	boolean GetDate(){
		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.setDateString (new String( m_oneline.getData (),nKey, m_oneline.getSize ()) );
		return true;
	}

	MailBuff CheckMimeExText(byte[] sSub){
		MailBuff tempBuff=new MailBuff (sSub);
		if( tempBuff.BeginWithKeyword ("?")==false )
			return null;
		//charset
		int nOff = tempBuff.FindStr ("?",0);
		
		tempBuff.setOffset (nOff+1);
		//code type
		nOff = tempBuff.FindStr ("?",0);
		if( nOff ==-1)
			return null;
		
		tempBuff.setOffset (nOff+1);
		if( tempBuff.BeginWithKeyword ("b") )
			bBase64 =true;
		else
			bBase64 =false;
		//codes
		nOff = tempBuff.FindStr ("?",0);
		if( nOff ==-1)
			return null;
		
		tempBuff.setOffset (nOff+1);
		nSubBegin = nOff+1;
		
		//codes end
		nOff = tempBuff.FindStr ("?=",0);
		if( nOff ==-1)
			return null;
		nSubSize = nOff - nSubBegin;
		
		return tempBuff;
	}
	
	String GetMimeExText(MailBuff MimeSub){
		byte[] sSubLine=new byte[1024];
		int    nDecode;
		if( bBase64 ){
			Base_64Coding B64 = new Base_64Coding();
			nDecode = B64.Decode ( MimeSub.getData (),sSubLine,nSubSize,
								   MimeSub.getOffset() ,0);
		}
		else{
			Ascii_7Coding A7 = new Ascii_7Coding();
			nDecode = A7.Decode ( MimeSub.getData (),sSubLine,nSubSize,
								   MimeSub.getOffset(),0);
			
		}
		return (new String( sSubLine,0,nDecode));
	}
}

⌨️ 快捷键说明

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