GAE - Javamail API获取空内容邮件

时间:2013-12-06 01:00:00

标签: java google-app-engine javamail

我正在使用这段代码从我的Gmail帐户中检索最新的电子邮件。

        Properties props = new Properties();
        props.setProperty("mail.store.protocol", "imaps");

        try {

            Session session = Session.getInstance(props, null);
            Store store = session.getStore();
            store.connect("imap.gmail.com", "<username@gmail.com>", "<password>");
            Folder inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);
            MimeMessage msg = (MimeMessage) inbox.getMessage(inbox.getMessageCount());
            Address[] in = msg.getFrom();
            for (Address address : in) {
                resp.getWriter().println("FROM:" + address.toString());
            }
            Multipart mp = (Multipart) msg.getContent();
            BodyPart bp = mp.getBodyPart(0);
            resp.getWriter().println("SENT DATE:" + msg.getSentDate());
            resp.getWriter().println("SUBJECT:" + msg.getSubject());
            resp.getWriter().println("CONTENT:" + bp.getContent());
        } catch (Exception mex) {
            mex.printStackTrace();
        }

它作为普通的Java应用程序运行良好。但是,当我在Google App Engine上运行的Servlet中使用它时,它只能获取FROM地址,内容为空。
msg.getFrom()工作正常,但msg.getContent()只返回null 谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

由于安全原因,GAE限制了您可以通过JavaMail接收的内容类型。消息部分和附件必须是多种允许类型之一,附件文件名必须以该类型的可识别文件扩展名结尾。 Here您可以找到所有已归属的MIME类型的列表。我想你的邮件内容不符合这些限制,这就是你得到空的原因。

我担心没有办法绕过这个限制。但是,您应该考虑应用程序是否可以仅使用允许的MIME类型。它们很多,所以它毕竟不应该是非常严格的限制。

您可以尝试的另一种解决方案是here

答案 1 :(得分:0)

我也有这个问题。

请仅使用允许的MIME类型。

或者您可以尝试将类型从原始更改为“text / html”。