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