查看邮件信息和内容

importjava.io.BufferedInputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Date;
importjava.util.Properties;

importjavax.mail.Address;
importjavax.mail.FetchProfile;
importjavax.mail.Flags;
importjavax.mail.Folder;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Part;
importjavax.mail.Session;
importjavax.mail.Store;
importjavax.mail.URLName;
importjavax.mail.event.StoreEvent;
importjavax.mail.event.StoreListener;
importjavax.mail.internet.ContentType;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.ParseException;

publicclassMainClass{

staticStringprotocol;

staticStringhost=null;

staticStringuser=null;

staticStringpassword=null;

staticStringmbox=null;

staticStringurl=null;

staticintport=-1;

staticbooleanverbose=false;

staticbooleandebug=false;

staticbooleanshowStructure=false;

staticbooleanshowMessage=false;

staticbooleanshowAlert=false;

staticbooleansaveAttachments=false;

staticintattnum=1;

publicstaticvoidmain(Stringargv[]){
intmsgnum=-1;
intoptind;
InputStreammsgStream=System.in;

for(optind=0;optind<argv.length;optind++){
if(argv[optind].equals("-T")){
protocol=argv[++optind];
}elseif(argv[optind].equals("-H")){
host=argv[++optind];
}elseif(argv[optind].equals("-U")){
user=argv[++optind];
}elseif(argv[optind].equals("-P")){
password=argv[++optind];
}elseif(argv[optind].equals("-v")){
verbose=true;
}elseif(argv[optind].equals("-D")){
debug=true;
}elseif(argv[optind].equals("-f")){
mbox=argv[++optind];
}elseif(argv[optind].equals("-L")){
url=argv[++optind];
}elseif(argv[optind].equals("-p")){
port=Integer.parseInt(argv[++optind]);
}elseif(argv[optind].equals("-s")){
showStructure=true;
}elseif(argv[optind].equals("-S")){
saveAttachments=true;
}elseif(argv[optind].equals("-m")){
showMessage=true;
}elseif(argv[optind].equals("-a")){
showAlert=true;
}elseif(argv[optind].equals("--")){
optind++;
break;
}elseif(argv[optind].startsWith("-")){
System.out.println("Usage:msgshow[-Lurl][-Tprotocol][-Hhost][-pport][-Uuser]");
System.out.println("\t[-Ppassword][-fmailbox][msgnum][-v][-D][-s][-S][-a]");
System.out.println("ormsgshow-m[-v][-D][-s][-S][-fmsg-file]");
System.exit(1);
}else{
break;
}
}

try{
if(optind<argv.length)
msgnum=Integer.parseInt(argv[optind]);

//GetaPropertiesobject
Propertiesprops=System.getProperties();

//GetaSessionobject
Sessionsession=Session.getInstance(props,null);
session.setDebug(debug);

if(showMessage){
MimeMessagemsg;
if(mbox!=null)
msg=newMimeMessage(session,newBufferedInputStream(newFileInputStream(mbox)));
else
msg=newMimeMessage(session,msgStream);
dumpPart(msg);
System.exit(0);
}

//GetaStoreobject
Storestore=null;
if(url!=null){
URLNameurln=newURLName(url);
store=session.getStore(urln);
if(showAlert){
store.addStoreListener(newStoreListener(){
publicvoidnotification(StoreEvente){
Strings;
if(e.getMessageType()==StoreEvent.ALERT)
s="ALERT:";
else
s="NOTICE:";
System.out.println(s+e.getMessage());
}
});
}
store.connect();
}else{
if(protocol!=null)
store=session.getStore(protocol);
else
store=session.getStore();

//Connect
if(host!=null||user!=null||password!=null)
store.connect(host,port,user,password);
else
store.connect();
}

//OpentheFolder

Folderfolder=store.getDefaultFolder();
if(folder==null){
System.out.println("Nodefaultfolder");
System.exit(1);
}

if(mbox==null)
mbox="INBOX";
folder=folder.getFolder(mbox);
if(folder==null){
System.out.println("Invalidfolder");
System.exit(1);
}

//trytoopenread/writeandifthatfailstryread-only
try{
folder.open(Folder.READ_WRITE);
}catch(MessagingExceptionex){
folder.open(Folder.READ_ONLY);
}
inttotalMessages=folder.getMessageCount();

if(totalMessages==0){
System.out.println("Emptyfolder");
folder.close(false);
store.close();
System.exit(1);
}

if(verbose){
intnewMessages=folder.getNewMessageCount();
System.out.println("Totalmessages="+totalMessages);
System.out.println("Newmessages="+newMessages);
System.out.println("-------------------------------");
}

if(msgnum==-1){
//Attributes&Flagsforallmessages..
Message[]msgs=folder.getMessages();

//UseasuitableFetchProfile
FetchProfilefp=newFetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(msgs,fp);

for(inti=0;i<msgs.length;i++){
System.out.println("--------------------------");
System.out.println("MESSAGE#"+(i+1)+":");
dumpEnvelope(msgs[i]);
//dumpPart(msgs[i]);
}
}else{
System.out.println("Gettingmessagenumber:"+msgnum);
Messagem=null;

try{
m=folder.getMessage(msgnum);
dumpPart(m);
}catch(IndexOutOfBoundsExceptioniex){
System.out.println("Messagenumberoutofrange");
}
}

folder.close(false);
store.close();
}catch(Exceptionex){
System.out.println("Oops,gotexception!"+ex.getMessage());
ex.printStackTrace();
System.exit(1);
}
System.exit(0);
}

publicstaticvoiddumpPart(Partp)throwsException{
if(pinstanceofMessage)
dumpEnvelope((Message)p);

/**
*Dumpinputstream..
*
*InputStreamis=p.getInputStream();//If"is"isnotalreadybuffered,
*wrapaBufferedInputStream//aroundit.if(!(isinstanceof
*BufferedInputStream))is=newBufferedInputStream(is);intc;while((c=
*is.read())!=-1)System.out.write(c);
*
*/

Stringct=p.getContentType();
try{
pr("CONTENT-TYPE:"+(newContentType(ct)).toString());
}catch(ParseExceptionpex){
pr("BADCONTENT-TYPE:"+ct);
}
Stringfilename=p.getFileName();
if(filename!=null)
pr("FILENAME:"+filename);

/*
*UsingisMimeTypetodeterminethecontenttypeavoidsfetchingtheactual
*contentdatauntilweneedit.
*/
if(p.isMimeType("text/plain")){
pr("Thisisplaintext");
pr("---------------------------");
if(!showStructure&&!saveAttachments)
System.out.println((String)p.getContent());
}elseif(p.isMimeType("multipart/*")){
pr("ThisisaMultipart");
pr("---------------------------");
Multipartmp=(Multipart)p.getContent();
level++;
intcount=mp.getCount();
for(inti=0;i<count;i++)
dumpPart(mp.getBodyPart(i));
level--;
}elseif(p.isMimeType("message/rfc822")){
pr("ThisisaNestedMessage");
pr("---------------------------");
level++;
dumpPart((Part)p.getContent());
level--;
}else{
if(!showStructure&&!saveAttachments){
/*
*Ifweactuallywanttoseethedata,andit'snotaMIMEtypewe
*know,fetchitandcheckitsJavatype.
*/
Objecto=p.getContent();
if(oinstanceofString){
pr("Thisisastring");
pr("---------------------------");
System.out.println((String)o);
}elseif(oinstanceofInputStream){
pr("Thisisjustaninputstream");
pr("---------------------------");
InputStreamis=(InputStream)o;
intc;
while((c=is.read())!=-1)
System.out.write(c);
}else{
pr("Thisisanunknowntype");
pr("---------------------------");
pr(o.toString());
}
}else{
//justaseparator
pr("---------------------------");
}
}

/*
*Ifwe'resavingattachments,writeoutanythingthatlookslikean
*attachmentintoanappropriatelynamedfile.Don'toverwriteexisting
*filestopreventmistakes.
*/
if(saveAttachments&&level!=0&&!p.isMimeType("multipart/*")){
Stringdisp=p.getDisposition();
//manymailersdon'tincludeaContent-Disposition
if(disp==null||disp.equalsIgnoreCase(Part.ATTACHMENT)){
if(filename==null)
filename="Attachment"+attnum++;
pr("Savingattachmenttofile"+filename);
try{
Filef=newFile(filename);
if(f.exists())
//XXX-couldtryaseriesofnames
thrownewIOException("fileexists");
((MimeBodyPart)p).saveFile(f);
}catch(IOExceptionex){
pr("Failedtosaveattachment:"+ex);
}
pr("---------------------------");
}
}
}

publicstaticvoiddumpEnvelope

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值