java - 在 JTable (Java Swing) 中显示电子邮件

标签 java jtable fetch email-client

我一直在尝试使用 JavaMail 插件在 JTable 中显示获取的电子邮件。但是,当我要求程序设置该值时,它永远不会这样做。我一直在 NetBeans 工作,这有什么帮助吗? fetchMail 类查找服务器上的所有内容。 GUI 类用于显示表中的所有电子邮件以及创建邮件。

你可能会认为我已经像瓷器店里的公牛一样尝试过,我是 Java 新手,试图给自己一个挑战。任何帮助/建议将不胜感激

获取邮件:

package mail;

import java.util.*;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
import javax.activation.*;

public class fetchMail {

    public void fetch(String username, String pass, String search) {
        MessagesTableModel tableModel = new MessagesTableModel();
        String complete;
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        gui gui = new gui();
        // SUBSTITUTE YOUR ISP's POP3 SERVER HERE!!!
        String host = "imap.gmail.com";
        // SUBSTITUTE YOUR USERNAME AND PASSWORD TO ACCESS E-MAIL HERE!!!
        String user = username;
        String password = pass;
        // SUBSTITUTE YOUR SUBJECT SUBSTRING TO SEARCH HERE!!!
        String subjectSubstringToSearch = search;

        // Get a session.  Use a blank Properties object.
        Session session = Session.getInstance(new Properties());
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
        props.setProperty("mail.imap.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.imap.socketFactory.fallback", "false");
        try {

            // Get a Store object
            Store store = session.getStore("imaps");
            store.connect(host, user, password);

            // Get "INBOX"
            Folder fldr = store.getFolder("INBOX");
            fldr.open(Folder.READ_WRITE);
            int count = fldr.getMessageCount();
            System.out.println(count + " total messages");


            // Message numebers start at 1
            for (int i = 1; i <= count; i++) {
                // Get  a message by its sequence number
                Message m = fldr.getMessage(i);

                // Get some headers
                Date date = m.getSentDate();
                int pos = i - 1;
                String d = df.format(date);
                Address[] from = m.getFrom();
                String subj = m.getSubject();
                String mimeType = m.getContentType();
                complete = date + "\t" + from[0] + "\t"
                    + subj + "\t" + mimeType;
                //tableModel.setMessages(m);
                gui.setDate(d, pos);

                // System.out.println(d + " " + i);
            }

            // Search for e-mails by some subject substring
            String pattern = subjectSubstringToSearch;
            SubjectTerm st = new SubjectTerm(pattern);
            // Get some message references
            Message[] found = fldr.search(st);

            System.out.println(found.length
                + " messages matched Subject pattern \""
                + pattern + "\"");

            for (int i = 0; i < found.length; i++) {
                Message m = found[i];
                // Get some headers
                Date date = m.getSentDate();
                Address[] from = m.getFrom();
                String subj = m.getSubject();
                String mimeType = m.getContentType();
                //System.out.println(date + "\t" + from[0] + "\t" +
                //                    subj + "\t" + mimeType);

                Object o = m.getContent();
                if (o instanceof String) {
                    //  System.out.println("**This is a String Message**");
                    // System.out.println((String)o);
                } else if (o instanceof Multipart) {
                    //  System.out.print("**This is a Multipart Message.  ");
                    Multipart mp = (Multipart) o;
                    int count3 = mp.getCount();
                    // System.out.println("It has " + count3 +
                    //    " BodyParts in it**");
                    for (int j = 0; j < count3; j++) {
                        // Part are numbered starting at 0
                        BodyPart b = mp.getBodyPart(j);
                        String mimeType2 = b.getContentType();
                        //   System.out.println( "BodyPart " + (j + 1) +
                        //                       " is of MimeType " + mimeType);

                        Object o2 = b.getContent();
                        if (o2 instanceof String) {
                            // System.out.println("**This is a String BodyPart**");
                            // System.out.println((String)o2);
                        } else if (o2 instanceof Multipart) {
                            // System.out.print(
                            // "**This BodyPart is a nested Multipart.  ");
                            Multipart mp2 = (Multipart) o2;
                            int count2 = mp2.getCount();
                            // System.out.println("It has " + count2 +
                            // "further BodyParts in it**");
                        } else if (o2 instanceof InputStream) {
                            // System.out.println(
                            // "**This is an InputStream BodyPart**");
                        }
                    } //End of for
                } else if (o instanceof InputStream) {
                    // System.out.println("**This is an InputStream message**");
                    InputStream is = (InputStream) o;
                    // Assumes character content (not binary images)
                    int c;
                    while ((c = is.read()) != -1) {
                        // System.out.write(c);
                    }
                }

                // Uncomment to set "delete" flag on the message
                //m.setFlag(Flags.Flag.DELETED,true);

            } //End of for

            // "true" actually deletes flagged messages from folder
            fldr.close(true);
            store.close();

        } catch (MessagingException mex) {
            // Prints all nested (chained) exceptions as well
            mex.printStackTrace();
        } catch (IOException ioex) {
            ioex.printStackTrace();
        }
    }
}

图形用户界面:

/**
 * gui.java
 *
 * Created on 13-May-2010, 18:29:30
 */
package mail;

import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import javax.mail.Address;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class gui extends javax.swing.JFrame {

    private MessagesTableModel tableModel;
// Table listing messages.
    private JTable table;
    String date;

    /** Creates new form gui */
    public gui() {

        initComponents();
    }

    @SuppressWarnings("unchecked")
    private void initComponents() {

        recieve = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        inboxTable = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        recieve.setText("Receve");
        recieve.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                recieveActionPerformed(evt);
            }
        });

        jButton1.setText("new");
        jButton1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        inboxTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object[][]{
                {null, null, null},
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String[]{
                "Date", "subject", "sender"
            }) {

            Class[] types = new Class[]{
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }
        });
        jScrollPane1.setViewportView(inboxTable);
        inboxTable.getColumnModel().getColumn(0).setResizable(false);
        inboxTable.getColumnModel().getColumn(1).setResizable(false);
        inboxTable.getColumnModel().getColumn(2).setResizable(false);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(39, 39, 39).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 558, javax.swing.GroupLayout.PREFERRED_SIZE).addGroup(layout.createSequentialGroup().addComponent(recieve).addGap(18, 18, 18).addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(73, 73, 73)));
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(31, 31, 31).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(recieve).addComponent(jButton1)).addGap(18, 18, 18).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 258, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(179, Short.MAX_VALUE)));

        pack();
    }// </editor-fold>

    private void recieveActionPerformed(java.awt.event.ActionEvent evt) {
        fetchMail fetch = new fetchMail();
        fetch.fetch("email goes here, password goes here, search goes here");
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        createMail create = new createMail();
        centerW center = new centerW();
        //create.attVis();
        center.center(create);
        create.setVisible(true);
    }

    public void setDate(String Date, int pos) {

        //pos = pos + 1;

        String[] s = new String[5];
        s[pos] = Date;

        inboxTable.setValueAt(Date, pos, 0);
    }

    public String getDate() {
        return date;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new gui().setVisible(true);

            }
        });
    }
// Variables declaration - do not modify
    private javax.swing.JTable inboxTable;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton recieve;
// End of variables declaration
}

最佳答案

However when I ask the program to set the value it never does.

好吧,我不知道这意味着什么。

你需要退后一步,简化问题。您的程序正在尝试做两件事:

a) 使用 JavaMail 阅读电子邮件 b) 在 JTable 中显示电子邮件信息

根据您的问题,我无法判断问题是“a”还是“b”。

因此,如果问题是 a),那么您需要创建一个简单的程序,使用一堆 System.out.println(...) 来显示从电子邮件查询返回的数据。

如果问题是 b),那么您首先需要学习如何使用硬编码的“电子邮件数据”创建表

一旦你分别解决了问题a和b,你就把它们放在一起,你就得到了一个解决方案。

您发布的代码不可执行,因此我们无法真正帮助您。如果您需要更多帮助,请发布您的SSCCE

关于java - 在 JTable (Java Swing) 中显示电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2841131/

相关文章:

java - 删除 JTable 中选定的复选框行(单个和多个)

java - JTable 中的自动过滤

javascript - 如何解决错误 "URL scheme must be "http"或 CORS 请求的 "https""。对于此代码

java - 如何使用Java在Oracle DB中插入汉字

Java android使用套接字发送消息

java - 无法将 Java 客户端连接到远程计算机中的独立 HBase 设置

java - 双击JTable

java - 为什么我绘制的图像在 JPanel 上闪烁?

reactjs - this.setState() 不会渲染获取的 Firebase 图片

javascript - 正常的 GET 请求在 Chrome (API) 中不起作用