- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们目前在 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/
使用 Python 的 rtmplib 绑定(bind)并遇到一些问题。 首先, 我有这样的东西: import librtmp conn = librtmp.RTMP(...) conn.con
基本上,我是在查看 Motorstorm 排行榜时在 PS3 上窃听数据包。排行榜以 XML 格式发送到我的 ps3,但只有在我获得授权后。那么有人可以告诉我这三个数据包之间发生了什么,以及我如何在浏
我正在努力了解 TCP,但解析大量 RFC 并没有帮助。我相信我了解连接和关闭握手,但我似乎无法找到任何总结实际数据流的内容。 在连接和关闭握手之间 TCP 数据包看起来像什么? (特别是标题) 最佳
我正在尝试通过 RCON 端口与我的 Minecraft 服务器通信。 虽然我不知道如何使用套接字和流的东西。四处寻找,我发现他们都有一些共同点。套接字、输入流和输出流。 我在我的代码中试过了,但返回
我正在 UDP 之上设计一个简单的协议(protocol),现在我意识到其他人可以将数据包发送到我正在监听的端口。这样的数据包对于我的应用程序来说显然是不正确的(我现在不担心安全问题) 是否有过滤这些
我目前有一个具有可自定义滴答率的游戏服务器,但在本示例中,我们建议服务器每秒仅滴答一次或 1hz。我想知道如果客户端发送速率比服务器快,因为我当前的设置似乎不起作用,那么处理传入数据包的最佳方法是什么
我无法理解网络字节顺序以及通过 UDP 发送和接收数据的顺序。我正在使用 C#。 我有一个结构保持: message.start_id = 0x7777CCCC; message.me
我正在为 USB 设备编写代码。假设 USB 主机开始控制读取传输以从设备读取一些数据,并且请求的数据量(设置数据包中的 wLength)是端点 0 最大数据包大小的倍数。那么在主机接收到所有数据后(
我有一台 Windows PC、Marvell 交换机、Netgear 交换机和一台 Ubuntu 机器连接在一起(通过 Netgear 交换机)。 我最近从 Windows PC 向 Marvell
在查看数据包字节码时,您将如何识别 dns 数据包。 IP header 的协议(protocol)字段会告诉后面有一个 UDP 帧,但是在 UDP 帧内没有协议(protocol)字段来指定接下来会
我有一个通过 udf 的 802.11 (wifi) 上各种类型的流量的 pcap。由于 MTU,udp(或更准确地说是 IP)对 wifi 数据包进行分段。我目前正在使用 SharpPcap 读取并
我正在开发的 Core Audio 应用程序上有此崩溃日志。我目前正在调试它,所以我的问题不是关于崩溃本身,而是关于 的含义“k”包 . 这是什么意思 ? 我已阅读 this , 和 this (关于
我在一台 VM Ubuntu 16.04 机器上的 100 个多播组上生成 UDP 数据包,并在另一台 VM Ubuntu 16.04 机器上订阅这些组。两者都在由 Hyper-V 管理器运行的 HP
这个问题在这里已经有了答案: How can I fix 'android.os.NetworkOnMainThreadException'? (66 个回答) 6年前关闭。 我正在尝试创建一个简单的
我正在寻找使用 Java 来欺骗 UDP 数据包。是否有任何好的 Java 库可以让您创建自己的 RAW SOCKETS? 最佳答案 我会使用包装 libpcap 的 Java API . libpc
我在基于 Tyrus 的客户端和 tomcat Web 服务器之间使用没有压缩的 websocket。我在 tomcat 端看到消息传入和传出我的套接字,但如果我设置一个wireshark来观察它们传
我的应用程序在模拟器中运行时无法接收 UDP 数据包。 UDP 数据包由“localhost”上的以下 java 程序通过端口 49999 发送。 DatagramSocket clien
我正在开发一个 Google Glass 应用程序,它需要在工作线程中监听 UDP 数据包(与发送 UDP 数据包的现有系统集成)。我之前发布了一个问题(请参阅 here )并收到了一个答案,其中提供
我正在从客户端向服务器发送两个数据包。我遇到的问题是,在服务器上读取的数据使两个字符串对于发送的最长字符串具有相同的长度。例如: 如果字符串 1 为:1234 字符串 2 为:abcdefghi 服务
我知道这是不好的做法,但是可以执行以下操作吗? Send packet1 to UDP port 1 port 1 receives packet1 and sends it to port 2 po
我是一名优秀的程序员,十分优秀!