使用javamail和IMAP的Google App Engine(GAE)message.getContent()不起作用 [英] Google App Engine (GAE) message.getContent() using javamail and IMAP not works

查看:168
本文介绍了使用javamail和IMAP的Google App Engine(GAE)message.getContent()不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有好几天试图通过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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆