370 lines
13 KiB
Java
370 lines
13 KiB
Java
/*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape Messaging Access SDK Version 3.5 code,
|
|
* released on or about June 15, 1998. *
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s): ______________________________________.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 1997 and 1998 Netscape Communications Corporation
|
|
* (http://home.netscape.com/misc/trademarks.html)
|
|
*/
|
|
|
|
/*
|
|
* This example programs demonstrates the use of Static and
|
|
* Dynamic MIME Parser.
|
|
*/
|
|
|
|
import java.awt.*;
|
|
import java.sql.*;
|
|
import java.util.Vector;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileInputStream;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.InputStream;
|
|
import java.io.IOException;
|
|
import netscape.messaging.mime.*;
|
|
|
|
|
|
public class testApp
|
|
{
|
|
byte b[];
|
|
FileOutputStream logfile;
|
|
int m_nFileNo;
|
|
|
|
public testApp()
|
|
{
|
|
b = new byte[100000];
|
|
m_nFileNo=0;
|
|
|
|
try
|
|
{
|
|
logfile = new FileOutputStream ("testapp.log");
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
}
|
|
|
|
void showObject (Object o)
|
|
{
|
|
InputStream in = null;
|
|
|
|
if (o == null)
|
|
return;
|
|
|
|
if (o instanceof MIMEMessage)
|
|
{
|
|
output ("--------------- Start Mime Message ---------------\n");
|
|
|
|
MIMEMessage m = (MIMEMessage) o;
|
|
|
|
try
|
|
{
|
|
Header[] h = m.getAllHeaders();
|
|
|
|
if (h != null)
|
|
for (int i=0; h != null && i < h.length; i++)
|
|
{
|
|
output ("message header = [" + h[i].getLine());
|
|
}
|
|
|
|
output ("* message body type = " + m.getBodyType() + "\n");
|
|
output ("* message content type = " + m.getContentType() + "\n");
|
|
output ("* message content subtype = " + m.getContentSubType() + "\n");
|
|
output ("* message content type param = " + m.getContentTypeParams() + "\n");
|
|
|
|
showObject (m.getBody(false));
|
|
output ("---------------- End Mime Message -----------------\n");
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
output (e.getMessage());
|
|
}
|
|
}
|
|
else if (o instanceof MIMEBasicPart)
|
|
{
|
|
output ("------------------- Start Mime BasicPart -------------------\n");
|
|
|
|
try
|
|
{
|
|
MIMEBasicPart m = (MIMEBasicPart) o;
|
|
in = m.getBodyData();
|
|
|
|
if (in != null)
|
|
{
|
|
int len = 0;
|
|
|
|
if (m.getMessageDataLen() < 100000)
|
|
len = in.read (b);
|
|
|
|
Header[] h = m.getAllHeaders();
|
|
|
|
if (h != null)
|
|
for (int i=0; h != null && i < h.length; i++)
|
|
{
|
|
output ("basic header = [" + h[i].getLine() );
|
|
}
|
|
|
|
output ("* basicpart content type = " + m.getContentType() + "\n");
|
|
output ("* basicpart content subtype = " + m.getContentSubType() + "\n");
|
|
output ("* basicpart content type param = " + m.getContentTypeParams() + "\n");
|
|
output ("* basicpart content ID = " + m.getContentID() + "\n");
|
|
output ("* basicpart content Disposition = " + m.getContentDisposition() + "\n");
|
|
output ("* basicpart content Disposition params = " + m.getContentDispParams() + "\n");
|
|
output ("* basicpart content Description = " + m.getContentDescription() + "\n");
|
|
output ("* basicpart content MD5 = " + m.getContentMD5() + "\n");
|
|
output ("* basicpart getbodysize() = " + m.getSize() + "\n");
|
|
output ("* basicpart content encoding = " + m.getContentEncoding() + "\n");
|
|
|
|
output (">>>>>>>>>>>>>>>>>>>> start data >>>>>>>>>>>>>>>>>>>\n");
|
|
|
|
// base64
|
|
if (m.getContentEncoding() == 0)
|
|
output ("[BASE64 BINARY DATA]");
|
|
// QP
|
|
else if (m.getContentEncoding() == 1)
|
|
output ("[QP DATA]");
|
|
// text
|
|
else
|
|
output (b, len);
|
|
|
|
output ("\n>>>>>>>>>>>>>>>>>>>> end data >>>>>>>>>>>>>>>>>>>>\n");
|
|
|
|
// base64
|
|
if (m.getContentEncoding() == 1 && m.getMessageDataLen() < 100000)
|
|
{
|
|
FileOutputStream out = new FileOutputStream ("bodydata" + m_nFileNo++ + ".out");
|
|
out.write (b, 0, m.getMessageDataLen());
|
|
out.close();
|
|
}
|
|
|
|
in.close();
|
|
}
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
output (e.getMessage());
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
output (e.getMessage());
|
|
}
|
|
|
|
output ("------------------- End Mime BasicPart -------------------\n");
|
|
}
|
|
else if (o instanceof MIMEMultiPart)
|
|
{
|
|
output ("------------------- Start Mime MultiPart -------------------\n");
|
|
|
|
MIMEMultiPart m = (MIMEMultiPart) o;
|
|
int count = m.getBodyPartCount();
|
|
|
|
// debug
|
|
output ("* multipart content type = " + m.getContentType() + "\n");
|
|
output ("* multipart content subtype = " + m.getContentSubType() + "\n");
|
|
output ("* multipart content type param = " + m.getContentTypeParams() + "\n");
|
|
output ("* multipart content ID = " + m.getContentID() + "\n");
|
|
output ("* multipart content Disposition = " + m.getContentDisposition() + "\n");
|
|
output ("* multipart content Disposition params = " + m.getContentDispParams() + "\n");
|
|
output ("* multipart content Description = " + m.getContentDescription() + "\n");
|
|
|
|
if (count > 0)
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
try
|
|
{
|
|
Object part = m.getBodyPart(i, false);
|
|
showObject (part);
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
output (e.getMessage());
|
|
}
|
|
}
|
|
|
|
output ("------------------- End Mime MultiPart ------------------\n");
|
|
}
|
|
|
|
else if (o instanceof MIMEMessagePart)
|
|
{
|
|
output ("------------------- Start Mime MessagePart ----------------\n");
|
|
|
|
MIMEMessagePart m = (MIMEMessagePart) o;
|
|
|
|
try
|
|
{
|
|
MIMEMessage part = m.getMessage(false);
|
|
|
|
Header[] h = m.getAllHeaders();
|
|
|
|
if (h != null)
|
|
for (int i=0; h != null && i < h.length; i++)
|
|
{
|
|
output ("messagepart header = [" + h[i].getLine() );
|
|
}
|
|
|
|
output ("* messagepart content type = " + m.getContentType() + "\n");
|
|
output ("* messagepart content subtype = " + m.getContentSubType() + "\n");
|
|
output ("* messagepart content type param = " + m.getContentTypeParams() + "\n");
|
|
output ("* messagepart content ID = " + m.getContentID() + "\n");
|
|
output ("* messagepart content Disposition = " + m.getContentDisposition() + "\n");
|
|
output ("* messagepart content Disposition params = " + m.getContentDispParams() + "\n");
|
|
output ("* messagepart content Description = " + m.getContentDescription() + "\n");
|
|
output ("* messagepart content encoding = " + m.getContentEncoding() + "\n");
|
|
|
|
showObject (part);
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
output (e.getMessage());
|
|
}
|
|
|
|
output ("------------------- End Mime MessagePart -----------------\n");
|
|
}
|
|
}
|
|
|
|
|
|
void parseFileMessage (String filename, boolean bDynamic)
|
|
{
|
|
if (!bDynamic) // perform Static Parsing
|
|
{
|
|
MIMEParser p = new MIMEParser();
|
|
|
|
output ("============== Begin Static Parsing " + filename + " ============\n");
|
|
|
|
if (filename != null && p != null)
|
|
{
|
|
try
|
|
{
|
|
FileInputStream input = new FileInputStream (filename);
|
|
showObject (p.parseEntireMessage (input));
|
|
input.close();
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
}
|
|
|
|
output ("\n=========== Parsing Complete " + filename + " =============\n\n");
|
|
|
|
}
|
|
else // perform Dynamic Parsing
|
|
{
|
|
try
|
|
{
|
|
myDataSink dataSink = new myDataSink();
|
|
MIMEDynamicParser p = new MIMEDynamicParser (dataSink);
|
|
FileInputStream input = new FileInputStream (filename);
|
|
byte[] buffer = new byte[256];
|
|
int bytesRead;
|
|
|
|
output ("============== Begin Dynamic Parsing " + filename + " ============\n");
|
|
|
|
p.beginParse();
|
|
|
|
bytesRead = input.read (buffer);
|
|
|
|
while (bytesRead > 0)
|
|
{
|
|
p.parse (buffer);
|
|
bytesRead = input.read (buffer);
|
|
}
|
|
|
|
p.endParse();
|
|
input.close();
|
|
|
|
//showObject (dataSink.m_mimeMessage);
|
|
|
|
output ("\n=========== Parsing Complete " + filename + " =============\n\n");
|
|
}
|
|
catch (MIMEException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
|
|
} // bDynamic
|
|
|
|
} // parseFileMessage
|
|
|
|
|
|
void output (String s)
|
|
{
|
|
try
|
|
{
|
|
logfile.write (s.getBytes());
|
|
System.out.println (s);
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
void output (byte b[], int len)
|
|
{
|
|
try
|
|
{
|
|
logfile.write (b, 0, len);
|
|
System.out.println (new String (b, 0, len));
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
System.out.println (e.getMessage());
|
|
}
|
|
}
|
|
|
|
/************ MIAN ******************/
|
|
static public void main(String args[])
|
|
{
|
|
boolean bDynamic=true; // Dynamic Parsing by Default
|
|
String filename;
|
|
|
|
if (args.length < 1)
|
|
{
|
|
System.out.println("usage: java testApp <file-name> [D]");
|
|
System.out.println("example: java testApp mime1.txt");
|
|
System.exit(0);
|
|
}
|
|
|
|
filename = args[0];
|
|
|
|
if (args.length > 1 && !args[1].equalsIgnoreCase("D"))
|
|
{
|
|
bDynamic = false; // Switch to Static Parsing
|
|
}
|
|
|
|
log.init();
|
|
log.timestampOff();
|
|
testApp ta = new testApp();
|
|
|
|
// parse the message in the file
|
|
ta.parseFileMessage (filename, bDynamic);
|
|
}
|
|
}
|