Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 7 of 7

Thread: Problem connecting email-client

  1. #1
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Problem connecting email-client

    Hello!

    I have a problem with a code. It's (supposed to be) an email-client with options to read messages and send them - the problem is, that it does not download the messages and is not able to send them - I assume that the problem lies in the connectiong.

    The program includes following classes
    EmailClient: The main class for the e-mail client application
    ConnectDialog: This class displays a dialog for entering e-mail server connection settings.
    MessagesTableModel: This class manages the e-mail table's data.
    MessageDialog: This class displays the dialog used for creating messages.

    Here's the main class, the most interesting are methods named sendMessage() and connect():

     
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.swing.*;
    import javax.swing.event.*;
     
    // The E-mail Client.
    public class EmailClient extends JFrame {
     
        // Message table's data model.
        private MessagesTableModel tableModel;
     
        // Table listing messages.
        private JTable table;
     
        // This the text area for displaying messages.
        private JTextArea messageTextArea;
     
      /* This is the split panel that holds the messages
         table and the message view panel. */
        private JSplitPane splitPane;
     
        // These are the buttons for managing the selected message.
        private JButton replyButton, forwardButton, deleteButton;
     
        // Currently selected message in table.
        private Message selectedMessage;
     
        // Flag for whether or not a message is being deleted.
        private boolean deleting;
     
        // This is the JavaMail session.
        private Session session;
     
        // Constructor for E-mail Client.
        public EmailClient() {
            // Set application title.
            setTitle("E-mail Client");
     
            // Set window size.
            setSize(640, 480);
     
            // Handle window closing events.
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    actionExit();
                }
            });
     
            // Setup file menu.
            JMenuBar menuBar = new JMenuBar();
            JMenu fileMenu = new JMenu("File");
            fileMenu.setMnemonic(KeyEvent.VK_F);
            JMenuItem fileExitMenuItem = new JMenuItem("Exit",
                    KeyEvent.VK_X);
            fileExitMenuItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    actionExit();
                }
            });
            fileMenu.add(fileExitMenuItem);
            menuBar.add(fileMenu);
            setJMenuBar(menuBar);
     
            // Setup buttons panel.
            JPanel buttonPanel = new JPanel();
            JButton newButton = new JButton("New Message");
            newButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    actionNew();
                }
            });
            buttonPanel.add(newButton);
     
            // Setup messages table.
            tableModel = new MessagesTableModel();
            table = new JTable(tableModel);
            table.getSelectionModel().addListSelectionListener(new
                    ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    tableSelectionChanged();
                }
            });
            // Allow only one row at a time to be selected.
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     
            // Setup E-mails panel.
            JPanel emailsPanel = new JPanel();
            emailsPanel.setBorder(
                    BorderFactory.createTitledBorder("E-mails"));
            messageTextArea = new JTextArea();
            messageTextArea.setEditable(false);
            splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                    new JScrollPane(table), new JScrollPane(messageTextArea));
            emailsPanel.setLayout(new BorderLayout());
            emailsPanel.add(splitPane, BorderLayout.CENTER);
     
            // Setup buttons panel 2.
            JPanel buttonPanel2 = new JPanel();
            replyButton = new JButton("Reply");
            replyButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    actionReply();
                }
            });
            replyButton.setEnabled(false);
            buttonPanel2.add(replyButton);
            forwardButton = new JButton("Forward");
            forwardButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    actionForward();
                }
            });
            forwardButton.setEnabled(false);
            buttonPanel2.add(forwardButton);
            deleteButton = new JButton("Delete");
            deleteButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    actionDelete();
                }
            });
            deleteButton.setEnabled(false);
            buttonPanel2.add(deleteButton);
     
            // Add panels to display.
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(buttonPanel, BorderLayout.NORTH);
            getContentPane().add(emailsPanel, BorderLayout.CENTER);
            getContentPane().add(buttonPanel2, BorderLayout.SOUTH);
        }
     
        // Exit this program.
        private void actionExit() {
            System.exit(0);
        }
     
        // Create a new message.
        private void actionNew() {
            sendMessage(MessageDialog.NEW, null);
        }
     
        // Called when table row selection changes.
        private void tableSelectionChanged() {
        /* If not in the middle of deleting a message, set
           the selected message and display it. */
            if (!deleting) {
                selectedMessage =
                        tableModel.getMessage(table.getSelectedRow());
                showSelectedMessage();
                updateButtons();
            }
        }
     
        // Reply to a message.
        private void actionReply() {
            sendMessage(MessageDialog.REPLY, selectedMessage);
        }
     
        // Forward a message.
        private void actionForward() {
            sendMessage(MessageDialog.FORWARD, selectedMessage);
        }
     
        // Delete the selected message.
        private void actionDelete() {
            deleting = true;
     
            try {
                // Delete message from server.
                selectedMessage.setFlag(Flags.Flag.DELETED, true);
                Folder folder = selectedMessage.getFolder();
                folder.close(true);
                folder.open(Folder.READ_WRITE);
            } catch (Exception e) {
                showError("Unable to delete message.", false);
            }
     
            // Delete message from table.
            tableModel.deleteMessage(table.getSelectedRow());
     
            // Update GUI.
            messageTextArea.setText("");
            deleting = false;
            selectedMessage = null;
            updateButtons();
        }
     
        // Send the specified message.
        private void sendMessage(int type, Message message) {
            // Display message dialog to get message values.
            MessageDialog dialog;
            try {
                dialog = new MessageDialog(this, type, message);
                if (!dialog.display()) {
                    // Return if dialog was cancelled.
                    return;
                }
            } catch (Exception e) {
                showError("Unable to send message.", false);
                return;
            }
     
            try {
                // Create a new message with values from dialog.
                Message newMessage = new MimeMessage(session);
                newMessage.setFrom(new InternetAddress(dialog.getFrom()));
                newMessage.setRecipient(Message.RecipientType.TO,
                        new InternetAddress(dialog.getTo()));
                newMessage.setSubject(dialog.getSubject());
                newMessage.setSentDate(new Date());
                newMessage.setText(dialog.getContent());
     
                // Send new message.
                Transport.send(newMessage);
            } catch (Exception e) {
                showError("Unable to send message.", false);
            }
        }
     
        // Show the selected message in the content panel.
        private void showSelectedMessage() {
            // Show hour glass cursor while message is loaded.
            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            try {
                messageTextArea.setText(
                        getMessageContent(selectedMessage));
                messageTextArea.setCaretPosition(0);
            } catch (Exception e) {
                showError("Unabled to load message.", false);
            } finally {
                // Return to default cursor.
                setCursor(Cursor.getDefaultCursor());
            }
        }
     
      /* Update each button's state based off of whether or not
         there is a message currently selected in the table. */
        private void updateButtons() {
            if (selectedMessage != null) {
                replyButton.setEnabled(true);
                forwardButton.setEnabled(true);
                deleteButton.setEnabled(true);
            } else {
                replyButton.setEnabled(false);
                forwardButton.setEnabled(false);
                deleteButton.setEnabled(false);
            }
        }
     
        // Show the application window on the screen.
        public void show() {
            super.show();
     
            // Update the split panel to be divided 50/50.
            splitPane.setDividerLocation(.5);
        }
     
        // Connect to e-mail server.
        public void connect() {
            // Display connect dialog.
            ConnectDialog dialog = new ConnectDialog(this);
            dialog.show();
     
            // Build connection URL from connect dialog settings.
            StringBuffer connectionUrl = new StringBuffer();
            connectionUrl.append(dialog.getType() + "://");
            connectionUrl.append(dialog.getUsername() + ":");
            connectionUrl.append(dialog.getPassword() + "@");
            connectionUrl.append(dialog.getServer() + "/");
     
        /* Display dialog stating that messages are
           currently being downloaded from server. */
            final DownloadingDialog downloadingDialog =
                    new DownloadingDialog(this);
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    downloadingDialog.show();
                }
            });
     
            // Establish JavaMail session and connect to server.
            Store store = null;
            try {
                // Initialize JavaMail session with SMTP server.
                Properties props = new Properties();
                props.put("mail.smtp.host", dialog.getSmtpServer());
                session = Session.getDefaultInstance(props, null);
     
                // Connect to e-mail server.
                URLName urln = new URLName(connectionUrl.toString());
                store = session.getStore(urln);
                store.connect();
            } catch (Exception e) {
                // Close the downloading dialog.
                downloadingDialog.dispose();
     
                // Show error dialog.
                showError("Unable to connect.", true);
            }
     
            // Download message headers from server.
            try {
                // Open main "INBOX" folder.
                Folder folder = store.getFolder("INBOX");
                folder.open(Folder.READ_WRITE);
     
                // Get folder's list of messages.
                Message[] messages = folder.getMessages();
     
                // Retrieve message headers for each message in folder.
                FetchProfile profile = new FetchProfile();
                profile.add(FetchProfile.Item.ENVELOPE);
                folder.fetch(messages, profile);
     
                // Put messages in table.
                tableModel.setMessages(messages);
            } catch (Exception e) {
                // Close the downloading dialog.
                downloadingDialog.dispose();
     
                // Show error dialog.
                showError("Unable to download messages.", true);
            }
     
            // Close the downloading dialog.
            downloadingDialog.dispose();
        }
     
        // Show error dialog and exit afterwards if necessary.
        private void showError(String message, boolean exit) {
            JOptionPane.showMessageDialog(this, message, "Error",
                    JOptionPane.ERROR_MESSAGE);
            if (exit)
                System.exit(0);
        }
     
        // Get a message's content.
        public static String getMessageContent(Message message)
        throws Exception {
            Object content = message.getContent();
            if (content instanceof Multipart) {
                StringBuffer messageContent = new StringBuffer();
                Multipart multipart = (Multipart) content;
                for (int i = 0; i < multipart.getCount(); i++) {
                    Part part = (Part) multipart.getBodyPart(i);
                    if (part.isMimeType("text/plain")) {
                        messageContent.append(part.getContent().toString());
                    }
                }
                return messageContent.toString();
            } else {
                return content.toString();
            }
        }
     
        // Run the E-mail Client.
        public static void main(String[] args) {
            EmailClient client = new EmailClient();
            client.show();
     
            // Display connect dialog.
            client.connect();
        }
    }

    I'm grateful for all the help I can get!


  2. #2
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    SW Missouri
    Posts
    20,077
    Thanks
    47
    Thanked 2,147 Times in 2,120 Posts

    Default Re: Problem connecting email-client

    How can the code be compiled and executed for testing?
    Is there a small driver that will allow the code to compile and be executed for testing?

    Are there any error messages?
    If you don't understand my answer, don't ignore it, ask a question.

  3. #3
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Problem connecting email-client

    I'm using Eclipse to compile and execute the program.
    There are no error messages, though an exception is caught.

  4. #4
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    SW Missouri
    Posts
    20,077
    Thanks
    47
    Thanked 2,147 Times in 2,120 Posts

    Default Re: Problem connecting email-client

    There are no error messages, though an exception is caught.
    There would be an error message if the catch block called the printStackTrace() method to print out the message.
    If you don't understand my answer, don't ignore it, ask a question.

  5. #5
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Problem connecting email-client

    After adding the method I got following error message:

    javax.mail.NoSuchProviderException: No provider for NORMAL
    at javax.mail.Session.getProvider(Session.java:464)
    at javax.mail.Session.getStore(Session.java:539)
    at EmailClient.connect(EmailClient.java:296)
    at EmailClient.main(EmailClient.java:365)


    There might be problem with the smtp or imap port ...?

  6. #6
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Problem connecting email-client

    Bump. Can anyone help?

  7. #7
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    SW Missouri
    Posts
    20,077
    Thanks
    47
    Thanked 2,147 Times in 2,120 Posts

    Default Re: Problem connecting email-client

    What are the reasons for the exception with that error message?

    To help anyone that wants to help you test, you need to make a smaller simpler program that compiles, executes and shows the problem. I think The posted code requires too many other classes that are not needed for solving this problem.
    If you don't understand my answer, don't ignore it, ask a question.

Similar Threads

  1. Problem with connecting to DataBase
    By ocean1991 in forum JDBC & Databases
    Replies: 1
    Last Post: January 11th, 2013, 11:19 AM
  2. Java Code Send email from email id configured in outlook
    By Hrithik in forum Java Theory & Questions
    Replies: 0
    Last Post: September 21st, 2012, 02:41 AM
  3. problem while sending email using org.apache.commons.mail.*
    By gurleen in forum Java Theory & Questions
    Replies: 2
    Last Post: September 10th, 2012, 11:21 AM
  4. Connecting to my torrent client (I use it for legal stuff only!)
    By jdruwe in forum Java Theory & Questions
    Replies: 0
    Last Post: August 9th, 2012, 10:16 AM
  5. Java problem -- sending email via JSP page
    By java_beginner in forum Java Theory & Questions
    Replies: 2
    Last Post: June 28th, 2010, 02:35 AM

Tags for this Thread