6

Java API を使用して電子メールを送信する簡単なアプリケーションを作成しましたが、質問があります。

電子メールを送信するためにログインする人の電子メール アドレスを知っている SMTP ホストを見つける方法はありますか? ポートも?

たとえば、送信者の電子メール アドレスが sender@gmail.com の場合、SMTP ホストは smtp.gmail.com で、ポートは 465 です。送信者の電子メール アドレスが sender@yahoo.com の場合、SMTP ホストは smtp です。 .yahoomail.com とポート 25。

私がこれを知らないと仮定すると、Java API クラスを使用してこの情報を見つける方法はありますか? 私はJavaが初めてであることに注意してください:)

前もって感謝します、

アンドレア


回答ありがとうございます。私は次のことを試みました:

public static String getMXRecordsForEmailAddress(String eMailAddress) { 
          
    String returnValue = null; 
    
    try { 
        String hostName = getHostNameFromEmailAddress(eMailAddress); 
        Record[] records = new Lookup(hostName, Type.MX).run();

        if (records == null) { 
            throw new RuntimeException("No MX records found for domain " + hostName + ".");
        }
         
        // return first entry (not the best solution) 
        if (records.length > 0) { 
            MXRecord mx = (MXRecord) records[0]; 
            returnValue = mx.getTarget().toString(); 
        } 
    } catch (TextParseException e) { 
        throw new RuntimeException(e); 
    } 
         
    System.out.println("return value = "+returnValue);
    return returnValue; 
} 

ただし、hostName の値に関係なく (gmail.com、yahoo.com など) Record[] records = new Lookup(hostName, Type.MX).run(); 常に null を返します。

私は何かを逃したと確信していますが、何がわかりません。これを手伝ってくれませんか?私が間違っていることを教えてもらえますか?

どうもありがとうございました、

アンドレア

4

3 に答える 3

1

残念ながら、ユーザーがメールアドレス/パスワードを指定し、そのアカウントを使用してメールを送信しようとしていると仮定すると、任意のメールアドレスに対して正しい送信 SMTP サーバーを識別する標準的な方法はありません。

そのため、通常、メール クライアント (Thunderbird、Outlook など) では、ユーザーが送信 SMTP サーバー名/ポートを手動で構成する必要があります。いくつかの一般的な ISP (Google、Yahoo など) を認識し、適切な値を事前に構成することで、そのプロセスを支援できますが、それを自動的に行う汎用的な方法はありません。

于 2012-04-22T14:33:39.033 に答える
0

通常、所有している smtp サーバーと通信し、yahoo Gmail へのメールのルーティングを処理し、サーバーへのランダムな isp を処理します。

使用する通常の API は、http://javamail.kenai.com/nonav/javadocs/javamailです。

独自の smtp サーバーを作成している場合: 1 しないでください 2 smtp 情報は DNS mxrecord http://en.m.wikipedia.org/wiki/MX_recordに保存されます

于 2012-04-21T19:08:30.750 に答える