在android中解析javamail消息以获取bodypart

时间:2013-06-21 09:57:23

标签: android javamail

我正在尝试使用Android中的IMAP检索电子邮件。我已设法从收件箱文件夹中检索邮件,但在解析它们时遇到困难,特别是获取邮件的正文部分(我打算在我的应用程序中进一步使用)。

我需要的只是一个函数,它接收一条消息并返回明文正文部分(如果可能,忽略附件)。

private String getbody(Message message) {           

    try {
        Object m=message.getContent();
    } catch (IOException e) {
        // TODO Auto-generated catch block
            e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "abc";                // THE BODY PART TO RETURN     

}

我导入了activation.jar文件。但是使用message.getcontent();给我一个错误:

06-20 15:22:50.363: E/AndroidRuntime(9477):     java.lang.RuntimeException: An error occured while executing doInBackground()
06-20 15:22:50.363: E/AndroidRuntime(9477):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.lang.Thread.run(Thread.java:856)
06-20 15:22:50.363: E/AndroidRuntime(9477):     Caused by: java.lang.NoClassDefFoundError: javax.activation.DataHandler
06-20 15:22:50.363: E/AndroidRuntime(9477):     at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:651)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1420)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at com.example.jmail.MainActivity$NetworkOperation.getbody(MainActivity.java:108)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at com.example.jmail.MainActivity$NetworkOperation.doInBackground(MainActivity.java:87)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at com.example.jmail.MainActivity$NetworkOperation.doInBackground(MainActivity.java:1)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-20 15:22:50.363: E/AndroidRuntime(9477):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-20 15:22:50.363: E/AndroidRuntime(9477):     ... 5 more

2 个答案:

答案 0 :(得分:1)

非常感谢你们的帮助..终于弄明白了:)

我一直在做的最大的错误就是将JRE的javamail和javabeans激活框架库添加到我的构建路径中。

有专门为Android开发的javamail.jar和activation.jar(以及一个additional.jar)的单独库版本,可以找到here.

答案 1 :(得分:0)

您的主要问题已在JavaMail FAQ中解答。

您获得的错误与此无关。不幸的是,Android不是Java,因此它不包含javax.activation。您需要弄清楚如何将其纳入Android。您可能会在StackOverflow上的其他地方找到答案。