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。
这样就解决了。
在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)
由于它找不到某个类,也许您缺少外部 jar?
编辑
您可以使用 JavaMail API 来处理您的电子邮件任务。JavaMail API 在 JavaEE 包中提供,其 jar 可供下载。遗憾的是它不能直接在 Android 应用程序中使用,因为它使用与 Android 完全不兼容的 AWT 组件。(这就是你收到此错误的原因)
您可以在以下位置找到 JavaMail 的 Android 端口:http://code.google.com/p/javamail-android/
将 jar 添加到您的应用程序并使用 SMTP 方法
| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |