javamail实例之获取邮件,包括gmail yahoo

来源:互联网 发布:php接口interface 编辑:程序博客网 时间:2024/06/07 00:25

 http://www.oracle.com/technetwork/java/javamail/index-138643.html

https://java.net/projects/javamail/pages/Home#Samples

/* * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution. * *   - Neither the name of Oracle nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */import java.util.*;import java.io.*;import javax.mail.*;import javax.mail.event.*;import javax.mail.internet.*;/* * Demo app that exercises the Message interfaces. * Show information about and contents of messages. * * @author John Mani * @author Bill Shannon */public class msgshow {static String protocol;static String host = null;static String user = null;static String password = null;static String mbox = null;static String url = null;static int port = -1;static boolean verbose = false;static boolean debug = false;static boolean showStructure = false;static boolean showMessage = false;static boolean showAlert = false;static boolean saveAttachments = false;static int attnum = 1;public static void main(String argv[]) {int optind;InputStream msgStream = System.in;if (argv.length < 2) {// gmail https -p 465//argv = "-T imaps -H imap.gmail.com -U xxx@gmail.com -P xxx ".split(" "); argv="-D -T pop3s -H pop.gmail.com -U xxx@gmail.com -P xxx".split(" ");// argv="-D -T pop3s -H pop.mail.yahoo.com -U xxx@yahoo.com -P xxx".split(" ");// argv="-T imaps -H imap.mail.yahoo.com -U xxx@yahoo.com -P xxx".split(" ");}for (optind = 0; optind < argv.length; optind++) {if (argv[optind].equals("-T")) {protocol = argv[++optind];} else if (argv[optind].equals("-H")) {host = argv[++optind];} else if (argv[optind].equals("-U")) {user = argv[++optind];} else if (argv[optind].equals("-P")) {password = argv[++optind];} else if (argv[optind].equals("-v")) {verbose = true;} else if (argv[optind].equals("-D")) {debug = true;} else if (argv[optind].equals("-f")) {mbox = argv[++optind];} else if (argv[optind].equals("-L")) {url = argv[++optind];} else if (argv[optind].equals("-p")) {port = Integer.parseInt(argv[++optind]);} else if (argv[optind].equals("-s")) {showStructure = true;} else if (argv[optind].equals("-S")) {saveAttachments = true;} else if (argv[optind].equals("-m")) {showMessage = true;} else if (argv[optind].equals("-a")) {showAlert = true;} else if (argv[optind].equals("--")) {optind++;break;} else if (argv[optind].startsWith("-")) {System.out.println("Usage: msgshow [-L url] [-T protocol] [-H host] [-p port] [-U user]");System.out.println("\t[-P password] [-f mailbox] [msgnum ...] [-v] [-D] [-s] [-S] [-a]");System.out.println("or     msgshow -m [-v] [-D] [-s] [-S] [-f msg-file]");System.exit(1);} else {break;}}try {// Get a Properties objectProperties props = System.getProperties();/**if (host.equals("imap.gmail.com")) {props.setProperty("mail.smtp.starttls.enable", "true");props.setProperty("mail.smtp.socketFactory.port", "465");props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.auth", "true");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.host", "smtp.gmail.com");}*/// Get a Session objectSession session = Session.getInstance(props, null);/**if (host.equals("imap.gmail.com"))// gmail需要授权 ssl{session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(user, password);}});System.out.println("gmail");}*/session.setDebug(debug);if (showMessage) {MimeMessage msg;if (mbox != null)msg = new MimeMessage(session, new BufferedInputStream(new FileInputStream(mbox)));elsemsg = new MimeMessage(session, msgStream);dumpPart(msg);System.exit(0);}// Get a Store objectStore store = null;if (url != null) {URLName urln = new URLName(url);store = session.getStore(urln);if (showAlert) {store.addStoreListener(new StoreListener() {public void notification(StoreEvent e) {String s;if (e.getMessageType() == StoreEvent.ALERT)s = "ALERT: ";elses = "NOTICE: ";System.out.println(s + e.getMessage());}});}store.connect();} else {if (protocol != null)store = session.getStore(protocol);elsestore = session.getStore();// Connectif (host != null || user != null || password != null)store.connect(host, port, user, password);elsestore.connect();}// Open the FolderFolder folder = store.getDefaultFolder();if (folder == null) {System.out.println("No default folder");System.exit(1);}if (mbox == null)mbox = "INBOX";folder = folder.getFolder(mbox);if (folder == null) {System.out.println("Invalid folder");System.exit(1);}// try to open read/write and if that fails try read-onlytry {folder.open(Folder.READ_WRITE);} catch (MessagingException ex) {folder.open(Folder.READ_ONLY);}int totalMessages = folder.getMessageCount();if (totalMessages == 0) {System.out.println("Empty folder");folder.close(false);store.close();System.exit(1);}if (verbose) {int newMessages = folder.getNewMessageCount();System.out.println("Total messages = " + totalMessages);System.out.println("New messages = " + newMessages);System.out.println("-------------------------------");}if (optind >= argv.length) {// Attributes & Flags for all messages ..Message[] msgs = folder.getMessages();// Use a suitable FetchProfileFetchProfile fp = new FetchProfile();fp.add(FetchProfile.Item.ENVELOPE);fp.add(FetchProfile.Item.FLAGS);fp.add("X-Mailer");folder.fetch(msgs, fp);for (int i = 0; i < msgs.length; i++) {System.out.println("--------------------------");System.out.println("MESSAGE #" + (i + 1) + ":");dumpEnvelope(msgs[i]);// dumpPart(msgs[i]);}} else {while (optind < argv.length) {int msgnum = Integer.parseInt(argv[optind++]);System.out.println("Getting message number: " + msgnum);Message m = null;try {m = folder.getMessage(msgnum);dumpPart(m);} catch (IndexOutOfBoundsException iex) {System.out.println("Message number out of range");}}}folder.close(false);store.close();} catch (Exception ex) {System.out.println("Oops, got exception! " + ex.getMessage());ex.printStackTrace();System.exit(1);}System.exit(0);}public static void dumpPart(Part p) throws Exception {if (p instanceof Message)dumpEnvelope((Message) p);/** * Dump input stream .. *  * InputStream is = p.getInputStream(); // If "is" is not already * buffered, wrap a BufferedInputStream // around it. if (!(is * instanceof BufferedInputStream)) is = new BufferedInputStream(is); * int c; while ((c = is.read()) != -1) System.out.write(c); **/String ct = p.getContentType();try {pr("CONTENT-TYPE: " + (new ContentType(ct)).toString());} catch (ParseException pex) {pr("BAD CONTENT-TYPE: " + ct);}String filename = p.getFileName();if (filename != null)pr("FILENAME: " + filename);/* * Using isMimeType to determine the content type avoids fetching the * actual content data until we need it. */if (p.isMimeType("text/plain")) {pr("This is plain text");pr("---------------------------");if (!showStructure && !saveAttachments)System.out.println((String) p.getContent());} else if (p.isMimeType("multipart/*")) {pr("This is a Multipart");pr("---------------------------");Multipart mp = (Multipart) p.getContent();level++;int count = mp.getCount();for (int i = 0; i < count; i++)dumpPart(mp.getBodyPart(i));level--;} else if (p.isMimeType("message/rfc822")) {pr("This is a Nested Message");pr("---------------------------");level++;dumpPart((Part) p.getContent());level--;} else {if (!showStructure && !saveAttachments) {/* * 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) {pr("This is a string");pr("---------------------------");System.out.println((String) o);} else if (o instanceof InputStream) {pr("This is just an input stream");pr("---------------------------");InputStream is = (InputStream) o;int c;while ((c = is.read()) != -1)System.out.write(c);} else {pr("This is an unknown type");pr("---------------------------");pr(o.toString());}} else {// just a separatorpr("---------------------------");}}/* * If we're saving attachments, write out anything that looks like an * attachment into an appropriately named file. Don't overwrite existing * files to prevent mistakes. */if (saveAttachments && level != 0 && p instanceof MimeBodyPart&& !p.isMimeType("multipart/*")) {String disp = p.getDisposition();// many mailers don't include a Content-Dispositionif (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {if (filename == null)filename = "Attachment" + attnum++;pr("Saving attachment to file " + filename);try {File f = new File(filename);if (f.exists())// XXX - could try a series of namesthrow new IOException("file exists");((MimeBodyPart) p).saveFile(f);} catch (IOException ex) {pr("Failed to save attachment: " + ex);}pr("---------------------------");}}}public static void dumpEnvelope(Message m) throws Exception {pr("This is the message envelope");pr("---------------------------");Address[] a;// FROMif ((a = m.getFrom()) != null) {for (int j = 0; j < a.length; j++)pr("FROM: " + a[j].toString());}// REPLY TOif ((a = m.getReplyTo()) != null) {for (int j = 0; j < a.length; j++)pr("REPLY TO: " + a[j].toString());}// TOif ((a = m.getRecipients(Message.RecipientType.TO)) != null) {for (int j = 0; j < a.length; j++) {pr("TO: " + a[j].toString());InternetAddress ia = (InternetAddress) a[j];if (ia.isGroup()) {InternetAddress[] aa = ia.getGroup(false);for (int k = 0; k < aa.length; k++)pr("  GROUP: " + aa[k].toString());}}}// SUBJECTpr("SUBJECT: " + m.getSubject());// DATEDate d = m.getSentDate();pr("SendDate: " + (d != null ? d.toString() : "UNKNOWN"));// FLAGSFlags flags = m.getFlags();StringBuffer sb = new StringBuffer();Flags.Flag[] sf = flags.getSystemFlags(); // get the system flagsboolean 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";elsecontinue; // skip itif (first)first = false;elsesb.append(' ');sb.append(s);}String[] uf = flags.getUserFlags(); // get the user flag stringsfor (int i = 0; i < uf.length; i++) {if (first)first = false;elsesb.append(' ');sb.append(uf[i]);}pr("FLAGS: " + sb.toString());// X-MAILERString[] hdrs = m.getHeader("X-Mailer");if (hdrs != null)pr("X-Mailer: " + hdrs[0]);elsepr("X-Mailer NOT available");}static String indentStr = "                                               ";static int level = 0;/** * Print a, possibly indented, string. */public static void pr(String s) {if (showStructure)System.out.print(indentStr.substring(0, level * 2));System.out.println(s);}}

https://java.net/projects/javamail/pages/Home#Samples

/* * Copyright (c) 1996-2010 Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution. * *   - Neither the name of Oracle nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */import java.util.Properties;import javax.mail.*;import com.sun.mail.imap.*;/** * Demo app that exercises the Message interfaces. List information about * folders. *  * @author John Mani * @author Bill Shannon */public class folderlist {static String protocol = null;static String host = null;static String user = null;static String password = null;static String url = null;static String root = null;static String pattern = "%";static boolean recursive = false;static boolean verbose = false;static boolean debug = false;public static void main(String argv[]) throws Exception {int optind;if(argv.length<2){//argv = "-T imaps -H imap.gmail.com -U xxx@gmail.com -P xxx ".split(" "); //argv="-r -T pop3s -H pop.gmail.com -U xxx@gmail.com -P xxx".split(" "); //argv="-T pop3s -H pop.mail.yahoo.com -U xxx@yahoo.com -P xxx".split(" "); argv="-T imaps -H imap.mail.yahoo.com -U xxx@yahoo.com -P xxx".split(" ");}for (optind = 0; optind < argv.length; optind++) {if (argv[optind].equals("-T")) {protocol = argv[++optind];} else if (argv[optind].equals("-H")) {host = argv[++optind];} else if (argv[optind].equals("-U")) {user = argv[++optind];} else if (argv[optind].equals("-P")) {password = argv[++optind];} else if (argv[optind].equals("-L")) {url = argv[++optind];} else if (argv[optind].equals("-R")) {root = argv[++optind];} else if (argv[optind].equals("-r")) {recursive = true;} else if (argv[optind].equals("-v")) {verbose = true;} else if (argv[optind].equals("-D")) {debug = true;} else if (argv[optind].equals("--")) {optind++;break;} else if (argv[optind].startsWith("-")) {System.out.println("Usage: folderlist [-T protocol] [-H host] [-U user] [-P password] [-L url]");System.out.println("\t[-R root] [-r] [-v] [-D] [pattern]");System.exit(1);} else {break;}}if (optind < argv.length)pattern = argv[optind];// Get a Properties objectProperties props = System.getProperties();// Get a Session objectSession session = Session.getInstance(props, null);session.setDebug(debug);// Get a Store objectStore store = null;Folder rf = null;if (url != null) {URLName urln = new URLName(url);store = session.getStore(urln);store.connect();} else {if (protocol != null)store = session.getStore(protocol);elsestore = session.getStore();// Connectif (host != null || user != null || password != null)store.connect(host, user, password);elsestore.connect();}// List namespaceif (root != null)rf = store.getFolder(root);elserf = store.getDefaultFolder();dumpFolder(rf, false, "");if ((rf.getType() & Folder.HOLDS_FOLDERS) != 0) {Folder[] f = rf.list(pattern);for (int i = 0; i < f.length; i++)dumpFolder(f[i], recursive, "    ");}store.close();}static void dumpFolder(Folder folder, boolean recurse, String tab)throws Exception {System.out.println(tab + "Name:      " + folder.getName());System.out.println(tab + "Full Name: " + folder.getFullName());System.out.println(tab + "URL:       " + folder.getURLName());if (verbose) {if (!folder.isSubscribed())System.out.println(tab + "Not Subscribed");if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0) {if (folder.hasNewMessages())System.out.println(tab + "Has New Messages");System.out.println(tab + "Total Messages:  "+ folder.getMessageCount());System.out.println(tab + "New Messages:    "+ folder.getNewMessageCount());System.out.println(tab + "Unread Messages: "+ folder.getUnreadMessageCount());}if ((folder.getType() & Folder.HOLDS_FOLDERS) != 0)System.out.println(tab + "Is Directory");/* * Demonstrate use of IMAP folder attributes returned by the IMAP * LIST response. */if (folder instanceof IMAPFolder) {IMAPFolder f = (IMAPFolder) folder;String[] attrs = f.getAttributes();if (attrs != null && attrs.length > 0) {System.out.println(tab + "IMAP Attributes:");for (int i = 0; i < attrs.length; i++)System.out.println(tab + "    " + attrs[i]);}}}System.out.println();if ((folder.getType() & Folder.HOLDS_FOLDERS) != 0) {if (recurse) {Folder[] f = folder.list();for (int i = 0; i < f.length; i++)dumpFolder(f[i], recurse, tab + "    ");}}}}


0 0