求助:andriod studio编写一个imap收信程序出错。

噢麦搞的 2020-10-16 03:14:31
引用:

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
////////////////////////////////////////////////////////////////////////
主函数
public static void parseMessage(Message ... messages) throws MessagingException, IOException {
if (messages == null || messages.length < 1)
throw new MessagingException("未找到要解析的邮件!");

// 解析所有邮件
for (int i = 0, count = messages.length; i < count; i++) {
MimeMessage msg = (MimeMessage) messages[i];
msg.setFlag(Flags.Flag.SEEN, true);
System.out.println("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
System.out.println("主题: " + getSubject(msg));
System.out.println("发件人: " + getFrom(msg));
System.out.println("收件人:" + getReceiveAddress(msg, null));
System.out.println("发送时间:" + getSentDate(msg, null));
System.out.println("是否已读:" + isSeen(msg));
System.out.println("邮件优先级:" + getPriority(msg));
System.out.println("是否需要回执:" + isReplySign(msg));
System.out.println("邮件大小:" + msg.getSize() * 1024 + "kb");
/*执行到这一步出错了,*/
boolean isContainerAttachment = isContainAttachment(msg);
System.out.println("是否包含附件:" + isContainerAttachment);

if (isContainerAttachment) {
saveAttachment(msg, "/storage/0D09-0B07/Download/"+msg.getSubject() + "_"); //保存附件
}


////////////////////////////////////////////////////////////////////////
被调用函数 isContainAttachment包含一个参数part






public static boolean isContainAttachment(Part part) throws MessagingException, IOException {
boolean flag = false;
if (part.isMimeType("multipart/*")) {
MimeMultipart multipart = (MimeMultipart) part.getContent();
int partCount = multipart.getCount();
for (int i = 0; i < partCount; i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
String disp = bodyPart.getDisposition();
if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
flag = true;
} else if (bodyPart.isMimeType("multipart/*")) {
flag = isContainAttachment(bodyPart);
} else {
String contentType = bodyPart.getContentType();
if (contentType.indexOf("application") != -1) {
flag = true;
}

if (contentType.indexOf("name") != -1) {
flag = true;
}
}

if (flag) break;
}
} else if (part.isMimeType("message/rfc822")) {
flag = isContainAttachment((Part)part.getContent());
}
return flag;
}






/System.out: ------------------解析第1封邮件--------------------
打印信息
I/System.out: 主题: this is an english mail for test
发件人: xxx <240xxx462@qq.com>
I/System.out: 收件人:240xxx462 <xxx@qq.com>
I/System.out: 发送时间:2020年10月16日 Fri 00:32
是否已读:true
I/System.out: 邮件优先级:普通
I/System.out: 是否需要回执:false
邮件大小:2423808kb


W/m.example.emai: Rejecting class com.sun.mail.handlers.multipart_mixed that attempts to sub-type erroneous class com.sun.mail.handlers.handler_base in /data/app/~~1vEvtEZuOFpwEYZmeWZG-g==/com.example.email-Pjja9LiRaQz5kqfN5tTA3w==/base.apk
E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.email, PID: 21568
java.lang.VerifyError: Rejecting class com.sun.mail.handlers.multipart_mixed that attempts to sub-type erroneous class com.sun.mail.handlers.handler_base (declaration of 'com.sun.mail.handlers.multipart_mixed' appears in /data/app/~~1vEvtEZuOFpwEYZmeWZG-g==/com.example.email-Pjja9LiRaQz5kqfN5tTA3w==/base.apk)
at java.lang.Class.newInstance(Native Method)
at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:631)
at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:603)
at javax.activation.CommandMap.createDataContentHandler(CommandMap.java:235)
at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:624)
at javax.activation.DataHandler.getContent(DataHandler.java:551)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1502)
at com.example.email.mail.IMAPReceiveMailTest.getMailTextContent(IMAPReceiveMailTest.java:311)
at com.example.email.mail.IMAPReceiveMailTest.parseMessage(IMAPReceiveMailTest.java:123)
at com.example.email.mail.IMAPReceiveMailTest.IMAP_recv(IMAPReceiveMailTest.java:79)
at com.example.email.MainActivity$4.run(MainActivity.java:141)
Caused by: java.lang.VerifyError: Verifier rejected class com.sun.mail.handlers.handler_base: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors() failed to verify: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors(): [0x4] can't resolve returned type 'Unresolved Reference: java.awt.datatransfer.DataFlavor[]' or 'Reference: javax.activation.ActivationDataFlavor[]' (declaration of 'com.sun.mail.handlers.handler_base' appears in /data/app/~~1vEvtEZuOFpwEYZmeWZG-g==/com.example.email-Pjja9LiRaQz5kqfN5tTA3w==/base.apk)
at java.lang.Class.newInstance(Native Method) 
at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:631) 
at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:603) 
at javax.activation.CommandMap.createDataContentHandler(CommandMap.java:235) 
at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:624) 
at javax.activation.DataHandler.getContent(DataHandler.java:551) 
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1502) 
at com.example.email.mail.IMAPReceiveMailTest.getMailTextContent(IMAPReceiveMailTest.java:311) 
at com.example.email.mail.IMAPReceiveMailTest.parseMessage(IMAPReceiveMailTest.java:123) 
at com.example.email.mail.IMAPReceiveMailTest.IMAP_recv(IMAPReceiveMailTest.java:79) 
at com.example.email.MainActivity$4.run(MainActivity.java:141) 
I/Process: Sending signal. PID: 21568 SIG: 9

高手帮我分析一下错在那些地方?
最新版IDE
...全文
39164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
噢麦搞的 2020-10-27
  • 打赏
  • 举报
回复
没人没人没人,顶,顶
噢麦搞的 2020-10-17
  • 打赏
  • 举报
回复

我们版本不一样的。看是不是这个?
好像没有开启嘛
闫文敬 2020-10-17
  • 打赏
  • 举报
回复
你看看是不是开启了即时运行影响的,关掉试试
闫文敬 2020-10-17
  • 打赏
  • 举报
回复
噢麦搞的 2020-10-17
  • 打赏
  • 举报
回复
贴下,build.gradle 内容
com.sun.mail:android-mail:1.6.0 这个有问题吗?

apply plugin: 'com.android.application'

android {
compileSdkVersion 30
buildToolsVersion "30.0.2"

defaultConfig {
applicationId "com.example.email"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

//设置编译jdk为1.8
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8

}

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










}

dependencies {

implementation fileTree(dir: "libs", include: ["*.jar"])

implementation 'com.sun.mail:android-mail:1.6.0'
implementation 'com.sun.mail:android-activation:1.6.0'

configurations { all*.exclude group: 'javax.activation', module: 'activation'}

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'


implementation "androidx.recyclerview:recyclerview:1.1.0"


/**
* 添加OkHttpClient依赖
*
*/
implementation 'com.squareup.okhttp3:okhttp:3.14.0'




testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'


}
不会写代码的猴子 版主 2020-10-17
  • 打赏
  • 举报
回复
(MimeMultipart) part.getContent();这里报错了,可能是Part这个包版本有问题

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧