在 JavaMail 中获取 html 电子邮件内容

Posted

技术标签:

【中文标题】在 JavaMail 中获取 html 电子邮件内容【英文标题】:Getting html Email Content in JavaMail 【发布时间】:2013-04-05 22:21:55 【问题描述】:

我使用 JavaMail API 为我的 android 手机制作了一个电子邮件客户端。如果它是 html 邮件,我不知道如何获取电子邮件内容。我正在使用以下代码来获取内容:

public void printMessage(int messageNo) throws Exception 
    Log.i("MsgNo", "Getting message number: " + messageNo);

    Message m = null;

    try 
        m = folder.getMessage(messageNo);
        dumpPart(m);
     catch (IndexOutOfBoundsException iex) 
        Log.i("Out of Range","Message number out of range");
    


public static void dumpPart(Part p) throws Exception 

    if (p instanceof Message)
        dumpEnvelope((Message)p);
    Object content = p.getContent();
    Log.i("dumpPart",(String) content);
    String ct = p.getContentType();
    try 
        pr("CONTENT-TYPE: " + (new ContentType(ct)).toString());
        Log.i("MsgNo", "Content Type");
     catch (ParseException pex) 
        pr("BAD CONTENT-TYPE: " + ct);
        Log.i("MsgNo", "Bad Content Type");

    


     //* Using isMimeType to determine the content type avoids
   //  * fetching the actual content data until we need it.

    if (p.isMimeType("text/plain")) 
        pr("This is plain text");
        pr("---------------------------");
        Log.i("Text", (String)p.getContent());       
     else 
         Log.i("MsgNo", "Just a Separator");
        // just a separator
        pr("---------------------------");

    

在 Logcat 中,我得到了 dumpenvelope((Message)p); 的返回值,但之后什么都没有。

有人知道该怎么做吗?

【问题讨论】:

【参考方案1】:

有没有抛出异常?

您是否enable debugging 并检查了协议跟踪以查看可能失败的原因?

你在使用 IMAP 吗?

看起来您的程序是由名为 msgshow.java 的 JavaMail 示例程序的片段创建的,您找到完整的原始示例程序了吗?

This JavaMail FAQ entry 可能也会有所帮助。

【讨论】:

不,没有抛出异常,如果我使用示例程序 msgshow,我会得到每个返回值,直到“这是纯文本 --------------- ------",但 (String)p.getContent() 什么也不返回。为了测试,我在 (String)p.getContent() 之后做了一个简单的 Log.i 调用,但我在 LogCat 中没有得到这个,所以我认为 (String)p.getContent() 是问题所在。我正在使用 POP3,我必须使用 Imap 吗? 协议跟踪将有助于调试它。使用 POP3,您必须等待整个邮件下载完成,然后才能访问任何内容。如果消息很大,则可能需要很长时间。您可以尝试设置超时,以防在与服务器通信时出现问题。而且,除非您有充分的理由不使用 IMAP,否则我建议您改用 IMAP。 好的,现在我正在使用 IMAP,但我没有收到消息内容。如果我尝试使用您可以在每个论坛中找到的 MimeMessage 的可能性,我只会从功能中获得数据垃圾作为内容...... 协议跟踪显示了什么,您的代码目前是什么样的?您是否尝试过将所有内容包装在 try/catch(Exception) 中以确保不会引发意外异常? 好的,我犯了一个错误,抛出了一个异常,但我没有看到它。如果我从我的应用程序中的 msgshow 演示文件运行 dumpPart Methode,我会收到此异常:java.lang.ClassCastException: com.sun.mail.util.QPDecoderStream cannot be cast to java.lang.String

以上是关于在 JavaMail 中获取 html 电子邮件内容的主要内容,如果未能解决你的问题,请参考以下文章

JavaMail直接发送邮件

Javamail:无法从我的大学电子邮件服务中获取附件

javamail: UrlDataSource获取网络文件作为邮件的附件|javamail发送二进制流附件的问题

[Java] JavaMail 发送带图片的 html 格式的邮件

如何使用 JavaMail 获取邮件帐户中可用文件夹的列表

使用 javamail api 发送的 html 电子邮件正文在 Outlook 中出现乱码