使用javamail和IMAP的Google App Engine(GAE)message.getContent()不起作用 [英] Google App Engine (GAE) message.getContent() using javamail and IMAP not works
问题描述
我有好几天试图通过Google App Engine项目上的IMAP获取消息的内容。
我设法提取所有其他信息,但提取内容跳转出错信息(即使调用message.getContent.tostring()也不工作,我尝试了MultiPart)。
我从一个普通项目(不是GAE和使用javamail.1.4.7)执行相同的操作,消息的内容完美显示。 b
$ b
这是GAE项目的代码:
import java.util.Properties;
import java.util.logging.Logger;
导入javax.mail.Session;
import java.io.IOException;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Store;
import javax.servlet.http。*;
@SuppressWarnings(serial)
public class nuevo extends HttpServlet {
private String User;
私人字符串通行证;
private static final Logger log = Logger.getLogger(nuevo.class
.getName());
public void doGet(HttpServletRequest req,HttpServletResponse resp)
抛出IOException {
User =User;
Pass =Pass;
LlamaIMAP(resp);
$ b public void LlamaIMAP(HttpServletResponse resp){
属性props = System.getProperties();
props.setProperty(mail.store.protocol,imaps);
props.put(mail.imap.host,imap.gmail.com);
props.put(mail.imap.user,User);
props.put(mail.imap.socketFactory,993);
props.put(mail.imap.socketFactory.class,
javax.net.ssl.SSLSocketFactory);
props.put(mail.imap.port,993);
Session session = Session.getDefaultInstance(props,
new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(User,Pass) ;
}
});
尝试{
Store store = session.getStore(imap);
store.connect(imap.gmail.com,993,User,Pass);
文件夹fldr = store.getFolder(Inbox);
fldr.open(Folder.HOLDS_MESSAGES);
// HOLDS_MESSAGES);
Message [] ar = fldr.getMessages();
int count = fldr.getMessageCount();
resp.getWriter()。println(count);
resp.getWriter()。println(ar [0] .getAllRecipients()[0] .toString());
resp.getWriter()。println(ar [0] .getFrom()[0] .toString());
resp.getWriter()。println(ar [0] .getSentDate()。toString());
resp.getWriter()。println(ar [0] .getSubject());
resp.getWriter()。println(ar [0] .getContent()。toString());
} catch(Exception exc){
try {
resp.getWriter()。println(exc +error);
} catch(IOException e){
// TODO自动生成的catch块
e.printStackTrace();
}
}
}
}
我设法修复它。
只需要将这几行添加到appengine-web.xml配置文件:
< class-loader-config>
< priority-specifier filename =imap.jar/>
< priority-specifier filename =gimap.jar/>
< priority-specifier filename =dsn.jar/>
< priority-specifier filename =mailapi.jar/>
< / class-loader-config>
谢谢。
I have several days trying to get the contents of a message through IMAP on a Google App Engine Project.
I managed to extract all the other information, but to extract the contents of jumps me an error message (not work even invoking message.getContent.tostring(), I've tried as MultiPart).
I perform the same action from a normal project , (not GAE and using javamail.1.4.7), the content of the messages shown perfectly.
This is the code of GAE project:
import java.util.Properties;
import java.util.logging.Logger;
import javax.mail.Session;
import java.io.IOException;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Store;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class nuevo extends HttpServlet {
private String User;
private String Pass;
private static final Logger log = Logger.getLogger(nuevo.class
.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
User = "User";
Pass = "Pass";
LlamaIMAP(resp);
}
public void LlamaIMAP(HttpServletResponse resp) {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
props.put("mail.imap.host", "imap.gmail.com");
props.put("mail.imap.user", User);
props.put("mail.imap.socketFactory", 993);
props.put("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.imap.port", 993);
Session session = Session.getDefaultInstance(props,
new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(User, Pass);
}
});
try {
Store store = session.getStore("imap");
store.connect("imap.gmail.com", 993, User, Pass);
Folder fldr = store.getFolder("Inbox");
fldr.open(Folder.HOLDS_MESSAGES);
// HOLDS_MESSAGES);
Message[] ar = fldr.getMessages();
int count = fldr.getMessageCount();
resp.getWriter().println(count);
resp.getWriter().println(ar[0].getAllRecipients()[0].toString());
resp.getWriter().println(ar[0].getFrom()[0].toString());
resp.getWriter().println(ar[0].getSentDate().toString());
resp.getWriter().println(ar[0].getSubject());
resp.getWriter().println(ar[0].getContent().toString());
} catch (Exception exc) {
try {
resp.getWriter().println(exc + "error");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
I managed to fix it.
Only you need to add this lines to the appengine-web.xml configuration file:
<class-loader-config>
<priority-specifier filename="imap.jar"/>
<priority-specifier filename="gimap.jar"/>
<priority-specifier filename="dsn.jar"/>
<priority-specifier filename="mailapi.jar"/>
</class-loader-config>
Thanks.
这篇关于使用javamail和IMAP的Google App Engine(GAE)message.getContent()不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!