【问题标题】:Parsing MIME message using JavaMail使用 JavaMail 解析 MIME 消息
【发布时间】:2012-06-19 22:48:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: java parsing email scala jakarta-mail


    【解决方案1】:

    它应该可以工作,所以我们需要更多关于你正在做什么的细节来找出问题所在。

    首先,让我们确保问题不在于您的代码,并且邮件消息的格式正确。使用 JavaMail 附带的 msgshow.java 演示程序来显示消息。使用 -m 选项并从包含 MIME 消息的文件重定向标准输入。它显示什么?

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

    【讨论】:

    • 感谢您的回答,我已经解决了我的问题,正如您所说,它在 MIME 消息格式中,我正在转义一些我不应该的 \n。之后一切都按预期进行。
    【解决方案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());
            }
        }
    

    【讨论】:

    • 我试过了,但是在尝试投射 Multipart 时出现异常,但我发现了错误,问题是我在不应该的地方转义了“\n”:P跨度>
    猜你喜欢
    • 2012-02-24
    • 2010-11-05
    • 2015-11-07
    • 2015-01-07
    • 2012-02-21
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多