【问题标题】:Problem with JavaMail and Exchange Server 2007 - BAD Command ArgumentJavaMail 和 Exchange Server 2007 的问题 - 错误的命令参数
【发布时间】:2010-11-06 06:20:47
【问题描述】:

在我正在处理的应用程序中,有一个函数可以使用 JavaMail 通过 IMAP 与邮件服务器连接。我们的一位客户有以下堆栈跟踪:

javax.mail.MessagingException: A13 BAD Command Argument Error. 11; 
nested exception is: 
com.sun.mail.iap.BadCommandException: A13 BAD Command Argument Error. 11 
at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:847) 
at javax.mail.Message.setFlag(Message.java:565) ...

现在,它试图做的事情如下:

messages[i].setFlag(Flags.Flag.RECENT, false);

其中messages[i]javax.mail.Message

现在,我们的任何使用 Exchange Server 2003 的客户都从未发生过此错误,并且由于该客户使用的是 Exchange Server 2007,我推测它与此有关(错误?)。 我还确保他们将其更新为最新的服务包和汇总更新(撰写本文时的服务包 1 更新 8)和最新的 JavaMail(撰写本文时的 1.4.2)并且没有任何影响。 我的问题是,这是我必须等待微软解决的问题吗? 有没有我可以采用的解决方法?

为了记录,我将最近标记设置为 false 的原因是,给定消息将不会在第二次传递中再次处理(即它只处理最近或新消息)。

【问题讨论】:

    标签: java exchange-server imap jakarta-mail exchange-server-2007


    【解决方案1】:

    我对@9​​87654321@ 的 API 的阅读表明它是客户端应用程序的只读。当“消息是此文件夹的新消息”时,文件夹实现应设置它。所以除非你正在编写一个文件夹实现,否则你不应该修改这个标志。

    这让人不禁想知道为什么您的其他客户没有收到错误消息。也许在某些情况下它被视为 NOOP?也许这个特定客户的文件夹有什么特别之处?也许是共享文件夹,或者用户也有读取权限的文件夹?我没有能力思考 Exchange 消息存储的奥秘。

    【讨论】:

    • Exchange Server 2007 上的另一个客户端也遇到了同样的问题。他们通过删除和重新创建邮箱“自行解决”了这个问题,并将其归结为 2003 年至 2007 年的升级问题。尽管重新创建了邮箱,但这个其他客户端仍然存在问题。目前使用 2003 的客户尚未投诉。
    • 如果我正确理解了您所指的 Javadocs,如果我正确关闭了邮件文件夹,然后在以后重新打开,则最近标记应该为上次存在的所有邮件关闭打开。如果是这样,那应该可以满足我的需求。
    • @Avrom:这是我的理解。关闭和重新打开应将任何新消息标记为最近。但是,您的应用程序是唯一访问文件夹的应用程序吗?如果没有,我怀疑如果其他一些应用程序打开/关闭该文件夹,您会遇到问题。我怀疑 Exchange(或任何 IMAP 服务器)是否会仅为您的应用程序保留一个 RECENT 标志。如果您的应用程序知道它处理了哪些消息很重要,那么您可能必须在消息上设置用户定义的标志。
    • 它应该是访问该特定邮箱的唯一应用程序,如果不是,我们向客户强调这可能是一个问题。 (换句话说,我们建议他们为此过程专门设置一个专用邮箱。)
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2013-11-16
    • 2019-06-21
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多