我正在使用这段代码从我的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
谢谢大家的帮助。
答案 0 :(得分:0)
由于安全原因,GAE限制了您可以通过JavaMail接收的内容类型。消息部分和附件必须是多种允许类型之一,附件文件名必须以该类型的可识别文件扩展名结尾。 Here您可以找到所有已归属的MIME类型的列表。我想你的邮件内容不符合这些限制,这就是你得到空的原因。
我担心没有办法绕过这个限制。但是,您应该考虑应用程序是否可以仅使用允许的MIME类型。它们很多,所以它毕竟不应该是非常严格的限制。
您可以尝试的另一种解决方案是here。
答案 1 :(得分:0)
我也有这个问题。
请仅使用允许的MIME类型。
或者您可以尝试将类型从原始更改为“text / html”。