📄 emailprocessor.java
字号:
else if (msg.isMimeType("multipart/*"))
{
Multipart mp = (Multipart)msg.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++)
{
String str = getMessage(mp.getBodyPart(i));
if (str.length() > 0)
{
if (sb.length() > 0)
sb.append("\n-----\n");
sb.append(str);
}
}
}
else
{
/*
* If we actually want to see the data, and it's not a
* MIME type we know, fetch it and check its Java type.
*/
Object o = msg.getContent();
if (o instanceof String)
{
sb.append(o);
}
}
}
catch (Exception e)
{
log.log(Level.SEVERE, "getMessage", e);
}
return sb.toString().trim();
} // getMessage
/**
* Get Delivery Report
* @param msg message
* @return delivery info or null
*/
private String getDeliveryReport (Part msg)
{
try
{
if (msg.isMimeType("multipart/report"))
{
String deliveryMessage = null;
String otherStuff = null;
//
Multipart mp = (Multipart)msg.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++)
{
Part part = mp.getBodyPart(i);
Object content = part.getContent();
if (content == null)
continue;
if (part.isMimeType("message/*"))
deliveryMessage = getDeliveredReportDetail (part);
else
otherStuff = content.toString().trim();
}
if (deliveryMessage != null)
return deliveryMessage;
return otherStuff;
}
else if (msg.isMimeType("message/*"))
{
return getDeliveredReportDetail (msg);
}
}
catch (Exception e)
{
log.log(Level.SEVERE, "getDeliveryReport", e);
}
// Nothing
return null;
} // getDeliveryReport
/**
* Get Delivered Report Detail
* @param part Mime Type message/*
* @return info or null
*/
private String getDeliveredReportDetail (Part part) throws Exception
{
Object content = part.getContent();
if (content == null)
return null;
String deliveryMessage = null;
if (content instanceof InputStream)
{
StringBuffer sb = new StringBuffer();
InputStream is = (InputStream)content;
int c;
while ((c = is.read()) != -1)
sb.append((char)c);
deliveryMessage = sb.toString().trim();
}
else
deliveryMessage = content.toString().trim();
//
if (deliveryMessage == null)
return null;
// Final-Recipient: RFC822; jjanke@compiere.org
int index = deliveryMessage.indexOf("Final-Recipient:");
if (index != -1)
{
String finalRecipient = deliveryMessage.substring(index);
int atIndex = finalRecipient.indexOf("@");
if (atIndex != -1)
{
index = finalRecipient.lastIndexOf(' ', atIndex);
if (index != -1)
finalRecipient = finalRecipient.substring(index+1);
atIndex = finalRecipient.indexOf("@");
if (atIndex != -1)
index = finalRecipient.indexOf(' ', atIndex);
if (index != -1)
finalRecipient = finalRecipient.substring(0, index);
index = finalRecipient.indexOf('\n');
if (index != -1)
finalRecipient = finalRecipient.substring(0, index);
return finalRecipient.trim();
}
}
return deliveryMessage;
} // getDeliveredReportDetail
/**************************************************************************
* Print Envelope
* @param m message
* @throws Exception
*/
private void dumpEnvelope(Message m) throws Exception
{
printOut("-----------------------------------------------------------------");
Address[] a;
// FROM
if ((a = m.getFrom()) != null)
{
for (int j = 0; j < a.length; j++)
printOut("FROM: " + a[j].toString());
}
// TO
if ((a = m.getRecipients(Message.RecipientType.TO)) != null)
{
for (int j = 0; j < a.length; j++)
printOut("TO: " + a[j].toString());
}
// SUBJECT
printOut("SUBJECT: " + m.getSubject());
// DATE
java.util.Date d = m.getSentDate();
printOut("SendDate: " + (d != null ? d.toString() : "UNKNOWN"));
// FLAGS
Flags flags = m.getFlags();
StringBuffer sb = new StringBuffer();
Flags.Flag[] sf = flags.getSystemFlags(); // get the system flags
boolean first = true;
for (int i = 0; i < sf.length; i++)
{
String s;
Flags.Flag f = sf[i];
if (f == Flags.Flag.ANSWERED)
s = "\\Answered";
else if (f == Flags.Flag.DELETED)
s = "\\Deleted";
else if (f == Flags.Flag.DRAFT)
s = "\\Draft";
else if (f == Flags.Flag.FLAGGED)
s = "\\Flagged";
else if (f == Flags.Flag.RECENT)
s = "\\Recent";
else if (f == Flags.Flag.SEEN)
s = "\\Seen";
else
continue; // skip it
if (first)
first = false;
else
sb.append(' ');
sb.append(s);
}
String[] uf = flags.getUserFlags(); // get the user flag strings
for (int i = 0; i < uf.length; i++)
{
if (first)
first = false;
else
sb.append(' ');
sb.append(uf[i]);
}
printOut("FLAGS: " + sb.toString());
// X-MAILER
String[] hdrs = m.getHeader("X-Mailer");
if (hdrs != null)
{
StringBuffer sb1 = new StringBuffer("X-Mailer: ");
for (int i = 0; i < hdrs.length; i++)
sb1.append(hdrs[i]).append(" ");
printOut(sb1.toString());
}
else
printOut("X-Mailer NOT available");
// Message ID
hdrs = m.getHeader("Message-ID");
if (hdrs != null)
{
StringBuffer sb1 = new StringBuffer("Message-ID: ");
for (int i = 0; i < hdrs.length; i++)
sb1.append(hdrs[i]).append(" ");
printOut(sb1.toString());
}
else
printOut("Message-ID NOT available");
// All
printOut("ALL HEADERs:");
Enumeration en = m.getAllHeaders();
while (en.hasMoreElements())
{
Header hdr = (Header)en.nextElement();
printOut (" " + hdr.getName() + " = " + hdr.getValue());
}
printOut("-----------------------------------------------------------------");
} // printEnvelope
/**
* Print Body
* @param p
* @throws Exception
*/
private void dumpBody (Part p) throws Exception
{
// http://www.iana.org/assignments/media-types/
printOut("=================================================================");
printOut("CONTENT-TYPE: " + p.getContentType());
/**
Enumeration en = p.getAllHeaders();
while (en.hasMoreElements())
{
Header hdr = (Header)en.nextElement();
printOut (" " + hdr.getName() + " = " + hdr.getValue());
}
printOut("= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =");
/** **/
/**
* Using isMimeType to determine the content type avoids
* fetching the actual content data until we need it.
*/
if (p.isMimeType("text/plain"))
{
printOut("Plain text ---------------------------");
System.out.println((String)p.getContent());
}
else if (p.getContentType().toUpperCase().startsWith("TEXT"))
{
printOut("Other text ---------------------------");
System.out.println((String)p.getContent());
}
else if (p.isMimeType("multipart/*"))
{
printOut("Multipart ---------------------------");
Multipart mp = (Multipart)p.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++)
dumpBody(mp.getBodyPart(i));
}
else if (p.isMimeType("message/rfc822"))
{
printOut("Nested ---------------------------");
dumpBody((Part)p.getContent());
}
else
{
/*
* If we actually want to see the data, and it's not a
* MIME type we know, fetch it and check its Java type.
*/
Object o = p.getContent();
if (o instanceof String)
{
printOut("This is a string ---------------------------");
System.out.println((String)o);
}
else if (o instanceof InputStream)
{
printOut("This is just an input stream ---------------------------");
InputStream is = (InputStream)o;
int c;
while ((c = is.read()) != -1)
System.out.write(c);
}
else
{
printOut("This is an unknown type ---------------------------");
printOut(o.toString());
}
}
printOut("=================================================================");
} // printBody
/**
* Print
* @param s string
*/
private static void printOut(String s)
{
// System.out.print(indentStr.substring(0, level * 2));
System.out.println(s);
}
/**************************************************************************
* Main Test
*/
public static void main (String[] arg)
{
Compiere.startupEnvironment(true);
EMailProcessor m = new EMailProcessor("admin", "test", "testcompiere");
m.processMessages();
// System.out.println(EMailServer.send("main", "jjanke@compiere.org", "jjanke@yahoo.com", "test1", "test1 message"));
// System.out.println(EMailServer.send("main", "administrator@compiere.org", "jjanke@yahoo.com", "test2", "test2 message"));
// System.out.println(EMailServer.send("main", "jjanke@compiere.org", "jjanke@yahoo.com", "test3", "test3 message"));
} // main
} // EMailProcessor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -