本文目录

一、背景介绍

二、报错内容

三、报错原因

四、解决方案


Caused by: com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters

一、背景介绍

公司的一个项目根据 javax.mail 统计邮箱里的邮件内容,由于邮件数量很多,如果全量读取收件箱里的邮件的话,会非常耗时,导致时间非常长(根据统计全量读取3000封邮件,耗时平均近7分钟),所以在读取收件箱里的邮件时要根据某些条件进行筛选,这样就很好的解决了这个问题。比如我的项目里,添加了根据时间筛选收件箱里的邮件,效率瞬间都提升上来了。但是我在添加时间范围的时候竟然报错,导致花费了一定的时间,在此做一个记录。

项目主要技术栈:Spring boot (2.0.0.RELEASE) + mybatis-plus (3.1.1) + JDK 1.8 + javax.mail (1.6.1)

关键代码:

    Properties props = new Properties();Session session = Session.getDefaultInstance(props, null);// 邮箱协议Store store = session.getStore("imap");// 邮箱主机,用户名和密码store.connect(mailHost, mailUsername, mailPassword);// 读取收件箱Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);// 以下为添加根据时间筛选邮件的条件Calendar calendar = Calendar.getInstance();// 搜索3天前到今天收到的的所有邮件,根据时间筛选邮件calendar.add(Calendar.DAY_OF_MONTH, -3);// 创建ReceivedDateTerm对象,ComparisonTerm.GE(大于等于),Date类型的时间 new Date(calendar.getTimeInMillis())----(表示3天前)ReceivedDateTerm term = new ReceivedDateTerm(ComparisonTerm.GE, new Date(calendar.getTimeInMillis()));// 把时间筛选条件添加到收件箱文件夹里,得到3天前到今天的所有邮件Message[] message = folder.search(term);// Message[] message = folder.getMessages(); 这个是获取收件箱里所有邮件// todo 进行你的业务

ComparisonTerm类 常用的日期和数字比较中,它使用六个常量 LE(<=)、LT(<)、EQ(=)、NE(!=)、GT(>)、GE(>=)来表示六种不同的比较操作。

如下图是我截取的jdk源码中的类的属性:

二、报错内容

主要报错:Caused by: com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters

详细报错如下:

javax.mail.MessagingException: A3 BAD invalid command or parameters;
  nested exception is:
    com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters
    at com.sun.mail.imap.IMAPFolder.search(IMAPFolder.java:1547)
    at com.iot.daily.task.MailNoSubmitTask.queryEmailDailyNoSubmitSync(MailNoSubmitTask.java:90)
    at com.iot.daily.task.MailNoSubmitTask$$FastClassBySpringCGLIB$$9403690b.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
    at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
    at java.util.concurrent.FutureTask.run(FutureTask.java)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters
    at com.sun.mail.iap.Protocol.handleResult(Protocol.java:296)
    at com.sun.mail.imap.protocol.IMAPProtocol.issueSearch(IMAPProtocol.java:1471)
    at com.sun.mail.imap.protocol.IMAPProtocol.search(IMAPProtocol.java:1379)
    at com.sun.mail.imap.protocol.IMAPProtocol.search(IMAPProtocol.java:1367)
    at com.sun.mail.imap.IMAPFolder.search(IMAPFolder.java:1527)
    ... 11 more

三、报错原因

报错的点是 ComparisonTerm.GE 这个比较操作,可能是这个 GE(大于等于)的操作不能和时间比较,如果改成 ComparisonTerm.GT (大于)的操作即可。然后一切正常。

具体的报错原因,还不清楚,希望各位知道的大佬不吝赐教,可在评论区讨论啊,以便帮助更多需要的人。

四、解决方案

ComparisonTerm.GE(大于等于) 这个大于等于比较改成 ComparisonTerm.GT (大于)大于比较即可。

即:下面的关键代码。

ReceivedDateTerm term = new ReceivedDateTerm(ComparisonTerm.GE, new Date(calendar.getTimeInMillis()));

改成

ReceivedDateTerm term = new ReceivedDateTerm(ComparisonTerm.GT, new Date(calendar.getTimeInMillis()));

拓展:

SpringBoot javax获取邮件内容,删除邮件、根据时间段筛选邮件,筛选时间段+未读邮件

完结!

【Java异常】Caused by: com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters的解决方案相关推荐

  1. com.sun.mail.util.MailConnectException: Couldn't connect to host异常解决

    最近在做一个接口项目,需要捕获所有的异常信息,并发送邮件给管理员.使用了JavaMail来实现,然后发现在本地(windows环境)上可以正常发送邮件,而放到了linux环境上就无法发送邮件.相关错误 ...

  2. 用MyEclipse测试发送email时报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

    java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream的异常时, 是因为MyEclipse8.5自带的javamail版本较 ...

  3. Maven ArtifactDescriptorException: Failed to read artifact descriptor for com.sun.mail 异常

    解决办法: 1.找到你的本地maven仓库 删除com/sun/mail下的所有文件. 2.右击项目 选择maven→updateProject 即可 坐等错误提示消失.

  4. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper

    JDK11 + Maven 开发 JavaFx 创建 Maven 项目 引入依赖 尝试启动(失败) 遇到问题 解决方案 旧电脑上 JDK8 开发 JavaFx 项目就很舒服欸,JDK11 不内置 Ja ...

  6. SpringBoot使用JavaMailSender发送邮件:com.sun.mail.smtp.SMTPSendFailedException: 451 MI:SFQ 163 smtp7

    SpringBoot使用JavaMailSender发送邮件时,报错如下: 2020-08-08 07:32:21,237 ERROR --- [http-nio-8080-exec-1] cn.co ...

  7. 【项目实践】——java异常A child container failed during start

    前提 小编使用的是maven的tomcat7插件,结果在启动项目的一直提示Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-pl ...

  8. Java异常机制的最佳实践

    文章目录 1 异常概念 1.1 历史中所谓的"异常" 解决方案 2 基本异常 简单的例子 抛出异常后 抛出异常的简单例子 异常模型的观点 异常参数 3 异常捕获 3.1 try 块 ...

  9. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...

    接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...

  10. 你所需要的java异常的处理和设计及深入理解,看这篇就差不多了

    一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看 ...

最新文章

  1. CTO让我研究中台(一):阿里的“数据+业务”双中台架构
  2. python截取html图片大小,Python打开html文件,截取屏幕截图,裁剪并保存为图像
  3. Python开发爬虫之理论篇
  4. 虚拟化宿主服务器网络设置,kvm虚拟化安装配置手册
  5. 逆向调试完成端口回包实践总结
  6. 安装chrome_Chrome 离线安装包下载
  7. 移动组件到指定坐标_《我的世界》传送石碑组件 史蒂夫表示跑路的日子终于结束了...
  8. videojs 动态加载视频
  9. git pull命令模式
  10. lp地址为什么位_为什么内存空间分配总是以64K为边界?
  11. 开课吧学python靠谱吗-开课吧成为CNCC中国计算机大会唯一教育合作伙伴
  12. Eclipse 插件 在线安装 收集
  13. String类源码阅读
  14. bootcamp opencore_黑苹果(Hackintosh)BootCamp 使用教程
  15. 传智播客asp.net基础视频免费分享
  16. Growing Mushrooms
  17. CS224n Assignment4解读 · 上
  18. 梧桐树王牌产品金玉满堂增额终身寿险下架在即,资产焦虑就买它
  19. GitHub是什么?GitHub如何使用?
  20. 基础篇. ARM架构和处理器(3)

热门文章

  1. JAVA端收集Liunx服务器 CPU 内存 磁盘使用率
  2. 一小时教会你用JAVA制作超级玛丽小游戏
  3. 管理的两大核心,工作目标、人的价值
  4. 树莓派Pico开发板扩展ESP01S无线WiFi模块通信实践
  5. 精华蚂蚁系统(解决旅行商 TSP问题)
  6. 金彩教育:如何提升自然流量
  7. 廊坊金彩教育:关键词有什么技巧
  8. 无损检测服务行业调研报告 - 市场现状分析与发展前景预测
  9. 光明勇士iOS服务器维护,裕际网络科技《光明勇士》3月11日 iOSamp;安卓部分区服数据互通公告 - 热门手游公告-TK游戏...
  10. 电商如何抢占“双十一”?试试自动化仓库机器人 | 行业