📄 messagedata.java
字号:
package MyNa.xml;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import MyNa.utils.Env;
public class MessageData {
// this class adds some simple utilities to Message
// so that we can pass questions and get answers.
// in effect, it makes a message look like a jdbc row
// with a getString(String columnLabel) method.
// so far: msgfromaddr,msgtoaddr,msgdate,msgsubject,
// msgsize,msgflags,msgxmailer,msgcontent
// we can't say "MessageData extends Message"
// because Message is an abstract class, but that's okay:
Message m;
static String[] allLabels=
{"msgfromaddr","msgtoaddr","msgdate","msgsubject","msgsize","msgflags","msgxmailer","msgcontent"};
static String[] defaultLabels=
{"msgfromaddr","msgtoaddr","msgdate","msgsubject","msgsize","msgflags","msgxmailer"};
String[]columnLabels;
public static String[] getAllLabels(){return allLabels;}
public static String[] getDefaultLabels(){return defaultLabels;}
public MessageData(Message m){this(m,defaultLabels);}
public MessageData(Message msg,String[]lbls)
{m=msg;columnLabels=(lbls==null||lbls.length==0)?defaultLabels:lbls;}
public String getString(String S)throws Exception{
if("msgfromaddr".equalsIgnoreCase(S))return getFromString();
if("msgtoaddr".equalsIgnoreCase(S))return getToString();
if("msgdate".equalsIgnoreCase(S))return getDateString();
if("msgsubject".equalsIgnoreCase(S))return getSubjectString();
if("msgsize".equalsIgnoreCase(S))return getSizeString();
if("msgflags".equalsIgnoreCase(S))return getFlagsString();
if("msgxmailer".equalsIgnoreCase(S))return getXMailerString();
if("msgcontent".equalsIgnoreCase(S))return getContentString();
return "ERROR: don't know how to get "+S+" from message";
}
public void addToEnv(Env E)throws Exception{ //put designated headers in env
if(null==columnLabels)throw new Exception("null columnlabels in addToEnv");
if(null==E)throw new Exception("null environment in addToEnv");
for(int i=0;i<columnLabels.length;i++)
E.put(columnLabels[i],getString(columnLabels[i]));
}
public String getFromString()throws Exception{
Address[]a=m.getFrom();
if(null==a || a.length==0)return "";
String S=a[0].toString();
for(int i=1;i<a.length;i++)S+="\n"+a[i].toString();
return S;
}
public String getToString()throws Exception{
Address[]a=m.getRecipients(Message.RecipientType.TO);
if(null==a || a.length==0)return "";
String S=a[0].toString();
for(int i=1;i<a.length;i++)S+="\n"+a[i].toString();
return S;
}
public String getSubjectString()throws Exception{return m.getSubject();}
public String getDateString()throws Exception{
Date d=m.getSentDate();
return d==null?"NoSendingDate":d.toString();
}
public String getSizeString()throws Exception{return ""+m.getSize();}
public String getFlagsString()throws Exception{
Flags flags=m.getFlags();
StringBuffer sb=new StringBuffer();
Flags.Flag[] sf=flags.getSystemFlags();
for(int i=0;i<sf.length;i++)
sb.append(sysFlagString(sf[i]));
String[]uf=flags.getUserFlags();
for(int i=0;i<uf.length;i++)
sb.append(uf[i]);
return sb.toString();
}
public String getMessageString()throws Exception{
StringWriter sw=new StringWriter(100);
PrintWriter out=new PrintWriter(sw);
msgToXml(m,out);
return sw.toString();
}
public String getContentString()throws Exception{
StringWriter sw=new StringWriter(100);
PrintWriter out=new PrintWriter(sw);
msgContentToXml(m.getContent(),out);
return sw.toString();
}
public String getXMailerString()throws Exception{
String[]hdrs = m.getHeader("X-Mailer");
if(null==hdrs)return "No X-Mailer";
return hdrs[0];
}
public static String sysFlagString(Flags.Flag f){
if(f==Flags.Flag.ANSWERED) return "/ans";
if(f==Flags.Flag.DELETED) return "/del";
if(f==Flags.Flag.DRAFT) return "/drft";
if(f==Flags.Flag.FLAGGED) return "/flg";
if(f==Flags.Flag.RECENT) return "/rcnt";
if(f==Flags.Flag.SEEN) return "/seen";
return "";
}
public static void msgToXml(Message m,PrintWriter out) throws Exception {
out.print("<message content_type=\"");
out.print(m.getContentType());
out.println("\">");
msgEnvelopeToXml(m,out);
msgContentToXml(m.getContent(),out);
out.print("</message>");
}
public static void msgContentToXml(Object o,PrintWriter out) throws Exception{
if(o instanceof String)out.println((String)o);
else if(o instanceof Multipart){
Multipart mp=(Multipart)o;
out.println("<multipart>");
for(int N=mp.getCount(),i=0;i<N;i++)
msgPartToXml(mp.getBodyPart(i),out);
out.println("</multipart>");
}
else if (o instanceof Message)msgToXml((Message)o,out);
else if (o instanceof InputStream){ // lazy string; coerce it
InputStream is=(InputStream)o;
int c;
while(-1 != (c = is.read()))out.write(c);
}
}
public static void msgPartToXml(Part p,PrintWriter out)throws Exception{
if(p instanceof Message){msgToXml((Message)p,out); return;}
out.print("<messagepart content_type=\"");
out.print(p.getContentType());
out.println("\">");
msgContentToXml(p.getContent(),out);
out.println("</messagepart>");
}
public static void msgEnvelopeToXml(Message m,PrintWriter out)throws Exception{
msgEnvelopeToXml(m,out,defaultLabels);
}
public static void msgEnvelopeToXml(Message m,PrintWriter out,String[]L)
throws Exception{
MessageData md=new MessageData(m,L);
for(int i=0;i<L.length;i++){
out.print("<message_");out.print(L[i]);out.print(">");
out.print(md.getString(L[i]));
out.print("</message_");out.print(L[i]);out.println(">");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -