2

Java でユーザーの電子メール サーバー設定を自動構成するプロジェクトに取り組んでいます。彼の電子メール アドレスからメール サーバーを抽出し、DirContextクラス withを使用してそのメール サーバーの MX レコードを検索していますcom.sun.jndi.dns.DnsContextFactory

Socket次に、各サーバーを開き、HELOコマンドを使用してそれらをテストし、応答を確認しています。

私の問題は、セキュリティで保護されていない SMTP ポート 25 でテストした場合にのみ機能することです。セキュリティで保護されたポート 465 で使用するにはどうすればよいですか?

を使用してSecure Socketsを使用してみました

SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket)sslsocketfactory.createSocket(mailserver, STANDARD_SMTP_PORT);

ただし、次のように、すべての接続でタイムアウト例外が発生します

alt1.gmail-smtp-in.l.google.com. java.net.ConnectException: Operation timed out

助けてください。

詳細情報: 私はメール クライアントを作成していません。これは、既存のメール クライアントのメール サーバー設定を簡素化するためです。

4

2 に答える 2

0

SMTP-SSL (ポート 465) は非推奨なので、ssl ソケットに接続しようとする代わりに、実際にはポート 25 (または smtp 認証接続の場合は 587) で「プレーンテキスト」を接続しますが、 HELOの代わりにEHLOを送信して、サーバーは廃止された SMTP-SSL を置き換える STARTTLS をサポートします。クライアントが STARTTLS コマンドを送信した後、接続は暗号化されるため、ポート 25 自体は「安全でない」わけではありません

telnet alt1.gmail-smtp-in.l.google.com 25
Trying 173.194.71.26...
Connected to alt1.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP i7si4620651lbb.76
EHLO myserver.com
250-mx.google.com at your service, [x.x.x.x]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS                  <<--------- this is what you're looking for
250 ENHANCEDSTATUSCODES
STARTTLS      <<--- client command to actually start encrypting the traffic
220 2.0.0 Ready to start TLS
于 2012-04-16T14:18:23.680 に答える
0

サーバーとの接続を確立する前に、プログラムを認証しましたか。すべてのリモート メール サーバーは、ソケット接続を確立しようとするマシンを認証する必要があります。たとえば、javaMail ライブラリを使用している場合、ユーザー名とパスワードを追加するオプションが表示されます。Java で単純なソケットを使用している場合は、回避策を見つける必要があります。

于 2012-04-30T09:31:50.610 に答える