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