3

我正在尝试使用 JavaMail API 解析 mime 消息,我做了一些研究,但我发现的步骤对我不起作用,其中一个是这里回答的内容: Java Email message Parser?

我正在传递一个 InputStream,因为 ByteArrayInputStream 来自我要解析的内容。当我这样做时,我的 message.getContent 会导致一个空字符串。

我正在使用 Scala,顺便说一句。

4

2 回答 2

2

我最近遇到了这个问题,所以你的研究不可能那么好。当我说最近时,我的意思是最近几天!:P

但这就是我阅读电子邮件所做的(或者至少在某种程度上阅读了电子邮件。它返回一大块 HTML 文本,这在 JEditorPane 中并不总是很漂亮

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();
 }

我必须用消息填充表格,然后当您单击表格中的消息时,它会显示一个包含该消息的新窗口。消息数组只是一个填充了消息对象的数组。因此,您显然需要一条消息来执行此操作。但你所追求的部分是这样的:

 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 消息的文件中重定向标准输入。它显示什么?

如果正确,请向我们展示您用于阅读消息的代码。

于 2012-06-17T21:44:49.140 回答