3

JavaMail APIを使用してmimeメッセージを解析しようとしています。調査を行いましたが、見つけた手順がうまくいきません。そのうちの1つは、ここで回答されたものです 。Java電子メールメッセージパーサー?

ByteArrayInputStreamが解析しようとしているコンテンツから取得されたため、InputStreamを渡して実行しています。これを行うと、message.getContentによって空の文字列が生成されます。

ところで、私はScalaを使用しています。

4

2 に答える 2

2

私は最近この問題を抱えていたので、あなたの研究はそれほど良くなかったはずです. 私が最近と言ったとき、私はここ数日を意味します!:P

しかし、これは私が電子メールを読むために行ったことです (または、少なくとも電子メールをある程度読んでいます。JEditorPane では常にきれいであるとは限らない HTML テキストの大きなチャンクが返されます)。

private void tableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseReleased
    final java.awt.event.MouseEvent e = evt;
    Thread t = new Thread(new Runnable() {
        @Override
       public void run() {
           if(table.getRowCount() == 0 || message == null || message.length == 0) {
        // Do nothing
    } else {
        try {
            int row = table.rowAtPoint(e.getPoint());                
            String subject = message[row].getSubject();
            String from = InternetAddress.toString(message[row].getFrom());
            StringBuilder body = new StringBuilder();
            Multipart mp = (Multipart) message[row].getContent();
            for(int i = 0; i < mp.getCount(); i++) {
                BodyPart bp = mp.getBodyPart(i);
                String disp = bp.getDisposition();
                if(disp != null && (disp.equals(BodyPart.ATTACHMENT))) {
                    // Do something
                } else {
                    body.append(bp.getContent());
                }
            }
            EmailContent ec = new EmailContent(new JFrame(),true,from,subject,"<html>" + body.toString());
        } catch (IOException ex) {
            Logger.getLogger(MailPanel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MessagingException ex) {
            Logger.getLogger(MailPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
       } 
    });
    t.start();
 }

テーブルにメッセージを入力する必要がありましたが、テーブル内のメッセージをクリックすると、そのメッセージが含まれた新しいウィンドウが表示されました。メッセージ配列は、Message オブジェクトで満たされた単なる配列です。したがって、これを行うには明らかにメッセージが必要です。しかし、あなたが求めている部分はこれです:

 StringBuilder body = new StringBuilder();
 Multipart mp = (Multipart) message[row].getContent();
    for(int i = 0; i < mp.getCount(); i++) {
        BodyPart bp = mp.getBodyPart(i);
        String disp = bp.getDisposition();
        if(disp != null && (disp.equals(BodyPart.ATTACHMENT))) {
            // Do something
        } else {
            body.append(bp.getContent());
        }
    }
于 2012-06-17T21:53:21.460 に答える
1

うまくいくはずなので、何が問題なのかを理解するために、あなたが何をしているのかについての詳細が必要です.

まず、問題がコードにあるのではなく、メール メッセージの形式が正しいことを確認しましょう。メッセージを表示するには、JavaMail に付属の msgshow.java デモ プログラムを使用します。-m オプションを使用して、MIME メッセージを含むファイルから stdin をリダイレクトします。それは何を表示しますか?

正しく動作する場合は、メッセージを読むために使用しているコードを表示してください。

于 2012-06-17T21:44:49.140 に答える