【问题标题】:Response message: javax.mail.MessageRemovedException: can't retrieve message #1 in POP3Message.getContentStream响应消息:javax.mail.MessageRemovedException:无法在 POP3Message.getContentStream 中检索消息 #1
【发布时间】:2019-03-03 05:09:42
【问题描述】:

我正在尝试从 JMeter 应用程序实现邮件协议。 SMTP 工作正常。在 POP3 的情况下,某些线程出现上述错误。

尝试过的解决方案:

  1. 已将证书分配给 POP3
  2. 增加了 Authenticated timeout 的值
  3. 登录错误已解决

问题:为什么在 POP3 实现过程中有些线程没有从输入流中获取消息?

【问题讨论】:

    标签: java jmeter smtp imap pop3


    【解决方案1】:

    POP,作为协议,做了两个重要的假设:首先,当您查看邮箱时,没有其他任何东西会修改邮箱。其次,一旦您查看了消息,这些消息就会被删除或存档(服务器精确地决定什么,客户端可以通过采取一些非默认操作来选择退出,我忘记了细节)。这种设计出现在每个服务器和每个客户端库中。您在多个线程中打开邮箱,因此您的服务器、客户端库或两者都会出现问题。

    您可以尝试使用单线程,也可以更改为 IMAP,或者您可以尝试调查您的客户端和服务器以避开您遇到的问题。这三个都是可能的,甚至是第三个。

    【讨论】:

    • 对于单线程,它工作正常。有关更多详细信息,我使用 MS-Exchange server 2016 作为邮件服务器。但我的问题是 - 我可以使用 POP3 访问某些线程的邮箱而不会出现任何错误吗?或者我是否需要更改 MS-Exchange Server 中的某些设置?
    • 您的意思是,您可以从多个线程访问相同的数据结构而无需任何锁定吗?不,你不能。也许您可以在 Exchange 中激活某种锁定。如果你这样做了,它可能只会锁定除一个线程之外的所有线程。
    【解决方案2】:

    很可能您正在使用具有 > 1 个线程的相同凭据(邮箱),这对我来说看起来不像一个正常的用例,因此请确保使用 parameterize your JMeter testCSV Data Set Config确保不同线程(虚拟用户)使用不同的凭据,因此访问不同的邮箱。


    如果您的测试已经假设不同的登录名,您可以尝试通过启用调试日志记录来确定发生了什么,为此将mail.debug 属性设置为true,方法是将下一行添加到 system.properties 文件:

    mail.debug=true
    

    或者通过-D命令行参数启动提供上述属性的JMeter

    jmeter -Dmail.debug=true -n -t test.jmx -l result.jtl
    

    更多信息:

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2018-01-03
      • 2023-03-10
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多