📄 mimesplit.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 + -