2010-05-15 2 views
0

Я пытаюсь отобразить извлеченные электронные письма в JTable, используя надстройку JavaMail. Однако, когда я прошу программу установить значение, которое он никогда не делает. Я работаю в NetBeans, если это какая-то помощь? класс fetchMail находит все возможное на сервере. Класс GUI используется для отображения всех электронных писем в таблице, а также создания почты.Отображение писем в JTable (Java Swing)

Возможно, вы подумаете, что я попробовал это как бык в фарфоровом магазине, я новичок в Java и стараюсь дать себе вызов. Любая помощь/советы будут оценены

Fetchmail:

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 
} 

ответ

1

Однако, когда я задаю программу установить значение он никогда не делает.

Ну, я не знаю, что это значит.

Вам необходимо отступить и упростить проблему. Ваша программа пытается сделать 2 вещи:

а) читать электронную почту с помощью JavaMail б) отображения информации по электронной почте в JTable

Основываясь на ваш вопрос я не могу сказать, если проблема «а» или " б».

Итак, если проблема заключается в a), вам необходимо создать простую программу, которая использует группу System.out.println (...) для отображения данных, возвращаемых из вашего запроса электронной почты.

Если проблема б), то вам в первую очередь необходимо узнать, как создать таблицу, используя жестко закодированные «данные электронной почты»

После решения проблемы а и б отдельно поместить их вместе, и у вас есть решение.

Код, который вы отправили, не является исполняемым, поэтому мы не можем вам помочь. Если вам нужна дополнительная помощь, разместите свой SSCCE.

Смежные вопросы