当前位置: 首页 > 知识库问答 >
问题:

如何使用javamail在android应用程序中处理多部分/备选方案?

左丘照
2023-03-14

我无法解析多部分电子邮件内容。有人能帮忙吗?

我使用stackoverflow上的帖子提示接收和解析电子邮件(从gmail)使用javamail。添加activation.jar

消息getcontentapi返回com。太阳邮政imap。IMAPMessage@423ff878

这意味着它不是由javamail数据源处理的。

内容如下所示:

内容类型:多部分/备选;边界=mimepart_51c2a32167465_82e9b701343f

--mimepart_51c2a32167465_82e9b701343f内容-类型:文本/普通;charset=utf-8内容-传输-编码:引用-可打印内容-处置:内联

...文本

--mimepart_51c2a32167465_82e9b701343f内容类型:text/html;charset=utf-8内容传输编码:引用的可打印内容配置:内联

http://www.w3.org/1999/xhtml"

--mimepart_51c2a32167465_82e9b701343f--

共有1个答案

端木野
2023-03-14

JavaMail API常见问题中给出的以下代码可能会有所帮助:

private boolean textIsHtml = false;

    /**
     * Return the primary text content of the message.
     */
    private String getText(Part p) throws
                MessagingException, IOException {
        if (p.isMimeType("text/*")) {
            String s = (String)p.getContent();
            textIsHtml = p.isMimeType("text/html");
            return s;
        }

        if (p.isMimeType("multipart/alternative")) {
            // prefer html text over plain text
            Multipart mp = (Multipart)p.getContent();
            String text = null;
            for (int i = 0; i < mp.getCount(); i++) {
                Part bp = mp.getBodyPart(i);
                if (bp.isMimeType("text/plain")) {
                    if (text == null)
                        text = getText(bp);
                    continue;
                } else if (bp.isMimeType("text/html")) {
                    String s = getText(bp);
                    if (s != null)
                        return s;
                } else {
                    return getText(bp);
                }
            }
            return text;
        } else if (p.isMimeType("multipart/*")) {
            Multipart mp = (Multipart)p.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                String s = getText(mp.getBodyPart(i));
                if (s != null)
                    return s;
            }
        }

        return null;
    }

(顺便说一句,我不确定这个答案现在是否对你有用,但如果有人面临同样的问题,我会把它贴出来供将来参考)。

 类似资料:
  • 问题内容: 我正在开发一个本机android应用程序,其中尝试使用2个开源库。问题是两个库都在各自的库中使用应用程序类。他们正在使用application标签下的“ android:name”在清单文件的相应源代码中注册这些类。问题是如何处理这种情况,因为众所周知,清单文件中只能使用ONE标签。我们是否可以在代码中注册/实例化应用程序类,以便我们在标记中仅提及一个库,而在代码中/实用地提及第二个库

  • 我是vapor的初学者,我选择vapor 3-rc作为开始,因为它似乎打破了vapor 2的变化。不幸的是,目前还没有完整的文档。 我目前正在尝试将一个简单的txt文件从Postman上传到我的Vapor 3本地服务器。 这是我的路线 和我的控制器 首先,通过执行邮递员请求,服务器返回: 通过研究源代码和关于此的有限文档,我似乎应该声明一个解码器来支持多部分传入请求。 所以我做到了: 我使用For

  • 问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate

  • 问题内容: 是否有一种实际的方法可以在PHP中实现多线程模型,无论是真正的还是仅对其进行仿真。一段时间以前,建议您可以强制操作系统加载PHP可执行文件的另一个实例并处理其他同时进行的进程。 这样做的问题是,当PHP代码完成执行PHP实例后,它仍保留在内存中,因为无法从PHP中杀死它。因此,如果您正在模拟多个线程,则可以想象会发生什么。因此,我仍在寻找一种可以在PHP中有效完成或模拟多线程的方法。有

  • 我有一个带post请求的控制器。我试图用一个简单的NotNull注释验证POJO。我正在使用ControllerAdvice来处理异常。 所以我尝试使用它,但当我启动应用程序时,我得到了以下信息: 因此,我想为BindException创建自己的处理程序,但当我为BindException类创建ExceptionHandler时,spring应用程序不会启动。如果我注释掉handleBindExc

  • 这是我从网站上获取的JSON代码。问题是此代码没有方括号,并且在数组中没有有效值,因此我不知道如何在android应用程序中使用此代码。 {"h0":{"id": 1081,"imgtitle":{"ar_AA":"",""fa_IR":"\u0644\u062d\u0638\u0647\u0631\u0633\u06cc\u062f\u0646...","en_GB":""},"imgtext"