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

📄 mimesplit.java

📁 JAVA邮件系统
💻 JAVA
字号:
import java.util .*;
import java.io.*;

public class MimeSplit
{
	public MailBuff sData;
	public Vector   allMime;

	public boolean dealWithIt( MailBuff data ){
		if(data==null)
			return false;
		sData = data;
		allMime = new Vector (5,5);
		
		splitAllMimes();
		return true;
	};
	public String getMimeKey(String sKey)
	{
		if( allMime==null )
			return null;
		for( int i=0;i<allMime.size();i++ ){
			if( ( (MimeKey)allMime.elementAt (i) ).sName .compareTo (sKey)==0 ){
				if( ( (MimeKey)allMime.elementAt (i) ).sFileName == null ){
					if( ( (MimeKey)allMime.elementAt (i) ).sContent==null )
						return null;
					return new String( ( (MimeKey)allMime.elementAt (i) ).sContent );
				}
				else
					return ( (MimeKey)allMime.elementAt (i) ).sFileName ;
			}
		}
		return null;
	}
	public byte[] getMimeKeyContent(String sKey)
	{
		if( allMime==null )
			return null;
		for( int i=0;i<allMime.size();i++ ){
			if( ( (MimeKey)allMime.elementAt (i) ).sName .compareTo (sKey)==0 )
				return ( (MimeKey)allMime.elementAt (i) ).sContent  ;
		}
		return null;
	}
	
	//
	String sBound;
	String sBoundEnd ;
	
	String sKey1="name=";
	String sKey2="filename=";
	String sKey3="\r\n";
	String sKey4="\r\n\r\n";
	void splitAllMimes()
	{
		if( sData==null )
			return;
		int    nBegin,nEnd,nEnd1,nEnd2,nEnd3;
			
		//get bound;
		nEnd = sData.FindStrNocase (sKey3,0);
		if(nEnd!=-1){
			sBound = new String( sData.getData (),0,nEnd );
			sBoundEnd = sBound+"--";
		}
		else
			return;
		
		sData.setOffset(nEnd);
		
		//find mime part;
		while(true)
		{
			//find name;
			nBegin = sData.FindStrNocase(sKey1,0)+sKey1.length ();
			if( nBegin<sKey1.length () ){
				
				break;
			}
			sData.setOffset (nBegin);
			nEnd =  sData.FindStrNocase(" ",0) ;
			nEnd2 = sData.FindStrNocase(",",0) ;
			nEnd3 = sData.FindStrNocase(";",0) ;
			nEnd1 = sData.FindStrNocase(sKey3,0);
			if( ( nEnd==-1 || nEnd > nEnd1 )&& nEnd1 !=-1 )
				nEnd = nEnd1;
			if( ( nEnd==-1 || nEnd > nEnd2 )&& nEnd2 !=-1 )
				nEnd = nEnd2;
			if( ( nEnd==-1 || nEnd > nEnd3 )&& nEnd3 !=-1 )
				nEnd = nEnd3;

			if( nEnd == -1 )
				nEnd = sData.getSize ()+sData.getOffset ();
			MimeKey mk= new MimeKey();
			mk.sName = dealwithString( new String(sData.getData (),nBegin,nEnd-nBegin ) );
			allMime.addElement (mk);

			sData.setOffset (nEnd);
			//find file name;
			nBegin = sData.FindStrNocase(sKey2,0)+sKey2.length ();
			nEnd = sData.FindStrNocase( sKey3,0 );
			if( nEnd>nBegin && nBegin>sKey2.length () ){
				sData.setOffset (nBegin);
				nEnd = sData.FindStrNocase(sKey3,0);
				nEnd1 = sData.FindStrNocase(",",0) ;
				nEnd2 = sData.FindStrNocase(";",0) ;
				if( ( nEnd==-1 || nEnd > nEnd1 )&& nEnd1 !=-1 )
					nEnd = nEnd1;
				if( ( nEnd==-1 || nEnd > nEnd2 )&& nEnd2 !=-1 )
					nEnd = nEnd2;
				if( nEnd == -1 )
					nEnd = sData.getSize ()+sData.getOffset ();
				mk.sFileName = getFileName( dealwithString(new String(sData.getData (),nBegin,nEnd-nBegin )));
				
				sData.setOffset (nEnd);
			}
			
			//find content;
			nBegin = sData.FindStrNocase(sKey4,0)+sKey4.length ();
			
			if( nBegin>=sKey4.length () ){
				sData.setOffset (nBegin);
				nEnd = sData.FindStrNocase(sBound,0) ;
				if( nEnd == -1 )
					nEnd = sData.getSize ()+sData.getOffset ();
				mk.sContent = new byte[nEnd-nBegin];
				MailBuff.CopyBuffer (mk.sContent,sData.getData (),nEnd-nBegin,
									 0,nBegin );

				mk.sContent = dealwithByte(mk.sContent);
				sData.setOffset (nEnd);
				
			}
			else
				break;

		}
	}
	
	String dealwithString(String sInfo)
	{
		if( sInfo==null||sInfo.length ()<2 )
			return sInfo;
		
		boolean bAllAD=true;
		
		if( sInfo.length ()<=2 ){
			for( int i=0;i<sInfo.length ();i++){
				if( sInfo.charAt (i)!=0xd ||sInfo.charAt (i)!=0xa )
					bAllAD=false;
			}
			if( bAllAD==true )
				return null;
		}
		
		if( sInfo.charAt (0)=='\"'&&sInfo.charAt (sInfo.length ()-1)=='\"' )
			return sInfo.substring (1,sInfo.length ()-1);
		return sInfo;
	}
	
	byte[] dealwithByte(byte[] sInfo)
	{
		if(sInfo==null)
			return null;
		boolean bAllAD=true;
		
		byte code;
		for( int i=0;i<sInfo.length;i++){
			code = sInfo[i];
			if( ( code!=(byte)10 ) && ( code!=(byte)13 ) ){
				bAllAD=false;
				break;
			}
		}
		if( bAllAD==true )
			return null;
		
		int nLength = sInfo.length  ;
		int i;
		for( i=sInfo.length-1;i>0;i-- ){
			if( i>1 && sInfo[i]== 0xa && sInfo[i-1]== 0xd){
				i--;				
				continue;
			}
			else
				break;
		}
		if( i==sInfo.length-1 )
			return sInfo;
		byte[] sRet = new byte[ i+1 ];
		MailBuff.CopyBuffer (sRet,sInfo,i+1,
									 0,0 );
		return sRet;
	}
	
	String getFileName(String sPath)
	{
		if(sPath==null)
			return null;
		int nBegin = sPath.lastIndexOf (File.separatorChar );
		if( nBegin!=-1&& nBegin + 1 < sPath.length () )
			return sPath.substring (nBegin+1,sPath.length ());
		return sPath;
	}
}

⌨️ 快捷键说明

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