使用javamail读取gmail收件箱,在eclipse中工作但不在外面工作

时间:2013-12-20 12:57:07

标签: eclipse javamail

我的代码连接到Gmail帐户并阅读收到的每封电子邮件。我检索电子邮件的内容。我使用javamail api。

当我从eclipse运行代码时,它的工作原理非常好。但是如果我将所有内容导出到一个jar文件然后从命令提示符运行,那么我会收到以下错误:

java.lang.ClassCastException: com.sun.mail.imap.IMAPInputStream cannot be cast to javax.mail.Multipart

在以下行中:

Multipart mp = (Multipart) msg.getContent();

我尝试过使用它,但它无济于事:

public static void main(String[] args) throws Exception {

    System.out.println("Begin");        

    Thread.currentThread().setContextClassLoader(getOldIds.class.getClassLoader());
    //read emails
    }


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

        Session session = Session.getInstance(props, null);

        Store store = session.getStore("imaps");
        store.connect("imap.gmail.com", -1, "username", "password");
                    //fetch the message from the inbox

请建议我应该做些什么。

由于

3 个答案:

答案 0 :(得分:1)

将此行添加到您的代码中: -

MimeMessage mimemsg = new MimeMessage(msg);
Multipart mp = (Multipart) mimemsg.getContent();

而不是: -

Multipart mp = (Multipart) msg.getContent();

在这里我可以安全地假设msg if com.sun.mail.imap.IMAPMessage

答案 1 :(得分:1)

如何将所有内容导出到jar文件中?

如果要将mail.jar文件中的所有应用程序类和所有JavaMail类组合到一个新的jar文件中,那么您将缺少从MIME类型配置映射的mail.jar文件中的资源文件到Java类。

您的应用程序类应该在一个jar文件中,并且该jar文件应该引用或使用JavaMail jar文件,例如,在应用程序运行时在CLASSPATH上。

答案 2 :(得分:0)

感谢大家的帮助......以下方法对我有用:

BufferedReader br = new BufferedReader( new InputStreamReader(msg.getInputStream()));

content="";
String line;

while((line=br.readLine())!=null){
        content = content + line;
    }

System.out.println("\n\n" + content);
br.close();