| /* |
| * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0, which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| import java.util.*; |
| import java.io.*; |
| import javax.mail.*; |
| import javax.mail.internet.*; |
| import javax.activation.*; |
| import java.awt.*; |
| import java.awt.event.*; |
| import javax.swing.*; |
| import javax.swing.table.*; |
| import javax.swing.tree.*; |
| import javax.swing.event.*; |
| |
| |
| /** |
| * Demo app that shows a very simple Mail Client |
| * |
| * @author Christopher Cotton |
| * @author Bill Shannon |
| */ |
| |
| public class SimpleClient { |
| |
| static Vector url = new Vector(); |
| static FolderViewer fv; |
| static MessageViewer mv; |
| |
| public static void main(String argv[]) { |
| boolean usage = false; |
| |
| for (int optind = 0; optind < argv.length; optind++) { |
| if (argv[optind].equals("-L")) { |
| url.addElement(argv[++optind]); |
| } else if (argv[optind].startsWith("-")) { |
| usage = true; |
| break; |
| } else { |
| usage = true; |
| break; |
| } |
| } |
| |
| if (usage || url.size() == 0) { |
| System.out.println("Usage: SimpleClient -L url"); |
| System.out.println(" where url is protocol://username:password@hostname/"); |
| System.exit(1); |
| } |
| |
| try { |
| // Set up our Mailcap entries. This will allow the JAF |
| // to locate our viewers. |
| File capfile = new File("simple.mailcap"); |
| if (!capfile.isFile()) { |
| System.out.println( |
| "Cannot locate the \"simple.mailcap\" file."); |
| System.exit(1); |
| } |
| |
| CommandMap.setDefaultCommandMap( new MailcapCommandMap( |
| new FileInputStream(capfile))); |
| |
| JFrame frame = new JFrame("Simple JavaMail Client"); |
| frame.addWindowListener(new WindowAdapter() { |
| public void windowClosing(WindowEvent e) {System.exit(0);}}); |
| //frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); |
| |
| // Get a Store object |
| SimpleAuthenticator auth = new SimpleAuthenticator(frame); |
| Session session = |
| Session.getDefaultInstance(System.getProperties(), auth); |
| //session.setDebug(true); |
| |
| DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); |
| |
| // create a node for each store we have |
| for (Enumeration e = url.elements() ; e.hasMoreElements() ;) { |
| String urlstring = (String) e.nextElement(); |
| URLName urln = new URLName(urlstring); |
| Store store = session.getStore(urln); |
| |
| StoreTreeNode storenode = new StoreTreeNode(store); |
| root.add(storenode); |
| } |
| |
| DefaultTreeModel treeModel = new DefaultTreeModel(root); |
| JTree tree = new JTree(treeModel); |
| tree.addTreeSelectionListener(new TreePress()); |
| |
| /* Put the Tree in a scroller. */ |
| JScrollPane sp = new JScrollPane(); |
| sp.setPreferredSize(new Dimension(250, 300)); |
| sp.getViewport().add(tree); |
| |
| /* Create a double buffered JPanel */ |
| JPanel sv = new JPanel(new BorderLayout()); |
| sv.add("Center", sp); |
| |
| fv = new FolderViewer(null); |
| |
| JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, |
| sv, fv); |
| jsp.setOneTouchExpandable(true); |
| mv = new MessageViewer(); |
| JSplitPane jsp2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, |
| jsp, mv); |
| jsp2.setOneTouchExpandable(true); |
| |
| frame.getContentPane().add(jsp2); |
| frame.pack(); |
| frame.show(); |
| |
| } catch (Exception ex) { |
| System.out.println("SimpletClient caught exception"); |
| ex.printStackTrace(); |
| System.exit(1); |
| } |
| } |
| |
| } |
| |
| class TreePress implements TreeSelectionListener { |
| |
| public void valueChanged(TreeSelectionEvent e) { |
| TreePath path = e.getNewLeadSelectionPath(); |
| if (path != null) { |
| Object o = path.getLastPathComponent(); |
| if (o instanceof FolderTreeNode) { |
| FolderTreeNode node = (FolderTreeNode)o; |
| Folder folder = node.getFolder(); |
| |
| try { |
| if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0) { |
| SimpleClient.fv.setFolder(folder); |
| } |
| } catch (MessagingException me) { } |
| } |
| } |
| } |
| } |