【问题标题】:Javamail attachment missing in google app engine谷歌应用引擎中缺少 Javamail 附件
【发布时间】:2013-05-24 13:41:30
【问题描述】:

我目前正在编写一个应用程序,它应该扫描用户邮件中的特定附件并从电子邮件消息中提取它们。

我使用 Javamail 连接到邮箱,检索邮件并解析电子邮件内容。 当我检索带有一个附件的邮件时,Javamail 给我一个 MultiPart 对象,其中包含 3 个正文部分:纯文本电子邮件、html 电子邮件和附件。

但是,如果我在 Google App Engine 环境中运行相同的代码来检索相同的电子邮件消息,我只会得到 2 个正文部分:纯文本电子邮件消息和 html 电子邮件消息。附件不见了。不过,附件内容在原始输入流中可用。

这是我用来检索和解析消息的部分代码:

Message[] messages = emailFolder.getMessages();
for(Message message : messages) {
    MimeMessage msg = new MimeMessage(emailSession, message.getInputStream());
    if(msg.getContent() instanceof Multipart) {
        Multipart multipart = (Multipart) msg.getContent();
        for(int i = 0; i < multipart.getCount(); i++) {
            BodyPart bodyPart = multipart.getBodyPart(i);
            System.out.println("ContentType: " + bodyPart.getContentType());
        }
    }
}

对这里发生的事情有什么想法吗? 在此先感谢:-)

【问题讨论】:

    标签: java google-app-engine jakarta-mail email-attachments pop3


    【解决方案1】:

    听起来像是 Google App Engine 中的一个错误。

    您正在从同一电子邮件服务器阅读同一电子邮件,对吧?

    可能由于(潜在的)病毒问题而导致附件被删除/隐藏?

    如果打开 JavaMail 会话调试,调试输出会显示什么?

    【讨论】:

    • 两种情况下的调试输出完全相同。客户端向服务器进行身份验证并检索消息。它显示带有 Base64 编码附件的原始消息。 Javamail 在 Google App Engine 环境中的行为有何不同?
    • 您是将整个邮件下载到客户端,还是在需要时使用 IMAP 仅下载附件?您是否正在使用 getInputStream 方法阅读附件?你确定你没有得到任何例外吗?您使用的是 Google 提供的 JavaMail 实现吗?
    • 我正在使用 POP3 下载整个邮件。没有例外,没有附件。 Base64 编码的附件存在于从 POP3 服务器接收的原始 InputStream 中,但不存在于解析的 BodyPart 对象中。 Google 是否提供了与 javax.mail 中的类不同的 JavaMail 实现?
    • 我不知道 Google 可能会在 App Engine 中提供哪些 JavaMail 类。您是否在应用程序中包含了 mail.jar?如果您使用 msg.writeTo() 并将消息写入您可以稍后检查的文件,您会得到什么?是那个文件里的所有数据吗?我不确定为什么在这两种情况下会以不同的方式解析完全相同的数据,但消息数据可能有问题?根据 JavaMail 调试输出,每种情况下使用的 JavaMail 版本是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2011-05-06
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多