JavaMail:Java.awt.datatransfer.Transferable 不存在

Oma*_*lOl 10 java android jakarta-mail

我不打算提出问题,但我没有解决这个问题!
我在从 IMAP 服务器接收消息时遇到问题。
错误说“由:java.lang.ClassNotFoundException:在路径上找不到类“java.awt.datatransfer.Transferable”......”这是我的代码:

enter String test(){
    String all="";
    try{
        class Runner extends AsyncTask<Object, String, String> {
            @Override
            protected String doInBackground(Object... params) {
                Looper.prepare();
                String all ="";
                try{
                    Message[] msgs = ReceiveMail("imap.gmail.com","993","USER@gmail.com","PASS"); // After passing this line, error logging says error is in this line!
                    for(Message m: msgs){
                        all+=m.getSubject()+"\n"+m.getContent().toString()+"\n\n"; // Error shows here, but popups above
                    }
                    return all;
                }catch (Exception e){
                    e.printStackTrace();
                }
                Looper.loop();
                return all;
            }
        }
        Runner r = new Runner();
        all = r.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this).get();
    }catch (Exception e){
        e.printStackTrace();
    }
    return all;
}
private Message[] ReceiveMail(String host,String port,String user,String pass){
    try{
        Properties props = new Properties();
        props.setProperty("mail.store.protocol", "imaps");
        props.setProperty("mail.imaps.host", host);
        props.setProperty("mail.imaps.port", port);
        props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.imaps.socketFactory.fallback", "false");
        Session imapSession = Session.getInstance(props);
        Store store = imapSession.getStore("imaps");
        store.connect(host, user, pass);
        Folder inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        return inbox.getMessages();
    }catch (Exception e){
        e.printStackTrace();
        //log_all("ReceiveMail function: "+e.getMessage());
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

问题是什么?
注意当我不使用 AsyncTask 时,会出现“主线程中的网络”错误。

解决方案
下载这些并将它们添加为库。
删除javax.*从依赖标签module settings
这样就解决了。

jme*_*ens 9

JavaMail的API参考实现版本1.5.5,后来有内置的支持Android的,并包括支持的OAuth2。根据文档:

Android 不提供 Java Compatible 运行时,因此无法运行标准的 JavaMail 发行版。相反,一个特殊版本的 JavaMail 可用于 Android。此特殊版本的 JavaMail 依赖于特殊版本的 JavaBeans Activation Framework。

您可以通过将以下内容添加到 Android 应用程序的 build.gradle 文件来试用此版本:

 android {
     packagingOptions {
         pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
     }
 }

 repositories { 
     jcenter()
     maven {
         url "https://maven.java.net/content/groups/public/"
     }
 }

 dependencies {
     compile 'com.sun.mail:android-mail:1.5.6'
     compile 'com.sun.mail:android-activation:1.5.6'
 }
Run Code Online (Sandbox Code Playgroud)


Edu*_*aia 2

由于它找不到某个类,也许您缺少外部 jar?

编辑

您可以使用 JavaMail API 来处理您的电子邮件任务。JavaMail API 在 JavaEE 包中提供,其 jar 可供下载。遗憾的是它不能直接在 Android 应用程序中使用,因为它使用与 Android 完全不兼容的 AWT 组件。(这就是你收到此错误的原因)

您可以在以下位置找到 JavaMail 的 Android 端口:http://code.google.com/p/javamail-android/

将 jar 添加到您的应用程序并使用 SMTP 方法