2013-05-29 107 views
0

我目前正在编写一个应用程序,该应用程序应扫描用户的邮件以获取特定附件并从电子邮件中提取它们。谷歌应用程序引擎中缺少Javamail附件

我使用Javamail连接到邮箱,检索邮件并解析邮件内容。 当我用一个附件检索邮件时,Javamail为我提供了一个包含3个正文部分的MultiPart对象:纯文本电子邮件消息,html电子邮件消息和附件。但是,如果我在Google App Engine环境中运行相同的代码段来检索相同的emailmessage,那么我只能得到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()); 
     } 
    } 
} 

在这里发生了什么任何想法? 在此先感谢:-)

回答

0

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

您正在阅读同一电子邮件服务器发送的同一封电子邮件,对吗?

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

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

+0

调试输出在两种情况下都完全相同。客户端向服务器进行身份验证并检索消息。它显示带有Base64编码附件的原始消息。 在Google App Engine环境中,Javamail如何表现如此不同? – User2431975

+0

您是否将整条消息下载到客户端,或者您是否使用IMAP在需要时下载附件?您是否正在使用getInputStream方法阅读附件?你确定你没有得到任何例外吗?您是否使用Google提供的JavaMail实施? –

+0

我正在使用POP3下载整个邮件。没有例外,没有附件。 Base64编码的附件存在于从POP3服务器接收的原始InputStream中,但不在解析的BodyPart对象中。 Google是否提供了JavaMail的不同实现,从javax.mail中的类提供appart? – User2431975