3

現在、Tomcat 7 コンテナー内で実行されている JavaMail アプリケーションで奇妙な問題が発生しています。Java Mail API は古典的な方法で使用され、派手すぎません (電子メール通知を送信するだけで、添付ファイルなどはありません)。テスト環境では、このコードは電子メールを MSExchangeServer に正常に送信します。

アプリケーションは Xen ハイパーバイザーで実行されており、ゲストは Windows 2008R2 です。Xen と Windows のバージョンはテスト用と実稼働用で同じです。JDK7u17 (最新、昨日ダウンロード) で実行しています。

EHLO/HELO フェーズで SMTP サーバーとの通信が途切れる

javax.mail.MessagingException: HELO コマンドを SMTP サーバーに送信できませんでした

次に、blatコマンドライン ユーティリティを使用して電子メールを送信しようとしましたが、 これは機能します。

putty で試してみましたが、telnet モードで putty を使用してメールサーバーに接続するときに問題を再現できます。RAW で putty に接続すると、EHLO コマンドを送信できます。

そのため、ゲームにスニファーを追加し、次の (再現可能な) 失敗したセッションセッション データを記録しました。

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 コマンドは 2 つのセグメントに分割されていることに注意してください。

次に、blat を使用してセッションを記録しました。

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 パケットのセグメンテーションを気にする必要はありません。

事前に感謝します。

トーマス

4

1 に答える 1

1

問題を解決できました。主な理由は 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>

お時間をいただきありがとうございます。おそらく、これは将来他の誰かを助けるでしょう。少なくとも、自分の時間は十分に投資されたと自分に言い聞かせることができました:-)

よろしくお願いします、

トーマス

于 2013-03-22T18:26:02.777 に答える