gpt4 book ai didi

Java 邮件 API 生成分段 IP 数据包,避免 EHLO 到 SMTP

转载 作者:可可西里 更新时间:2023-11-01 02:34:33 25 4
gpt4 key购买 nike

我们目前在 Tomcat 7 容器中运行的 JavaMail 应用程序遇到了一个相当奇怪的问题。 Java Mail API 以经典的方式使用,并不太花哨(只发送电子邮件通知,没有附件等)。在测试环境中,此代码成功将电子邮件发送到 MSExchangeServer。

该应用程序在 Xen Hypervisor 上运行, guest 是 Windows 2008R2,Xen 和 Windows 版本对于测试和生产是相同的。我们在 JDK7u17(最新,昨天下载)上运行。

与 SMTP 服务器的通信在 EHLO/HELO 阶段中断

javax.mail.MessagingException: 向 SMTP 服务器发送 HELO 命令失败

然后我们尝试使用 blat commandline utility 发送电子邮件 这有效。

我们已经尝试过使用 putty,在 telnet 模式下使用 putty 连接到邮件服务器时,我们可以重现该问题,如果以 RAW 方式使用 putty 连接,我们可以发送 EHLO 命令。

因此,我们在游戏中添加了一个嗅探器并记录了以下(可重现的)失败 session session data :

00000000  32 32 30 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a 220 **** ********
00000010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ******** ********
00000020 2a 0d 0a *..
00000000 45 E
00000001 48 4c 4f 20 53 52 56 2d 46 50 53 2d 30 32 0d 0a HLO SRV- FPS-02..
00000023 35 30 32 20 75 6e 69 6d 70 6c 65 6d 65 6e 74 65 502 unim plemente
00000033 64 20 28 23 35 2e 35 2e 31 29 0d 0a d (#5.5. 1)..
00000011 48 H
00000012 45 4c 4f 20 53 52 56 2d 46 50 53 2d 30 32 0d 0a ELO SRV- FPS-02..
0000003F 35 30 32 20 75 6e 69 6d 70 6c 65 6d 65 6e 74 65 502 unim plemente
0000004F 64 20 28 23 35 2e 35 2e 31 29 0d 0a d (#5.5. 1)..
00000022 51 Q
00000023 55 49 54 0d 0a UIT..
0000005B 35 30 32 20 75 6e 69 6d 70 6c 65 6d 65 6e 74 65 502 unim plemente
0000006B 64 20 28 23 35 2e 35 2e 31 29 0d 0a d (#5.5. 1)..

请注意,EHLO 命令分为两段。

现在我们用 blat 录制了一个 session :

00000000  32 32 30 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a 220 **** ********
00000010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ******** ********
00000020 2a 0d 0a *..
00000000 45 48 4c 4f 20 73 72 76 2d 66 70 73 2d 30 32 0d EHLO srv -fps-02.
00000010 0a .
00000023 32 35 30 2d 72 65 6c 61 79 2e 6d 65 64 69 61 6e 250-rela y.median
00000033 65 74 2d 77 6f 72 6c 64 2e 64 65 0d 0a 32 35 30 et-world .de..250
00000043 2d 50 49 50 45 4c 49 4e 49 4e 47 0d 0a 32 35 30 -PIPELIN ING..250
00000053 20 38 42 49 54 4d 49 4d 45 0d 0a 8BITMIM E..

如您所见,EHLO 不在包边界上,因此服务器回复 250-...

我们尝试了另一台邮件服务器,看看邮件服务器的 recv 功能是否可能损坏,但另一台服务器表现出相同的行为。

我们现在已经意识到另一个 JavaMail 应用程序能够通过完全相同的邮件服务器发送邮件。乍一看,代码没有区别,但另一个应用程序使用 JavaMail 1.3,而失败的应用程序使用 JavaMail 1.4(取自 Geronimo 1.4 -1.7.1)。

任何想法,为什么数据包分段对邮件服务器有影响?在我看来,在与 TCP 通信时,我不应该关心 IP 数据包分段。

感谢任何帮助,提前致谢!

托马斯

最佳答案

我们能够解决这个问题,主要原因是 geronimo 库。应该更好地检查 Maven Central :-(

我们现在已经切换到 javax.mail.mail:1.4,这解决了这个问题。

备案:

通信失败使用:

        <dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-activation_1.1_spec</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.javamail</groupId>
<artifactId>geronimo-javamail_1.4_provider</artifactId>
<version>1.8.3</version>
</dependency>

通信工作使用:

<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
</dependencies>

感谢您抽出宝贵的时间,也许这对将来的其他人有帮助。至少我可以告诉自己,我的时间投入得很好:-)

最好的问候,

托马斯

关于Java 邮件 API 生成分段 IP 数据包,避免 EHLO 到 SMTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com