2
  1. 以下にコードを貼り付けましたが、Transport.connect を超えてコードが機能しない理由がわかりません。フローを確認するために、ステップ 1、ステップ 2、ステップ 3 を追加しました。出力では、ステップ 2 まで取得しています。応答がありません。

     import javax.mail.*;
     import javax.mail.internet.*;
     import java.util.*;
    
     public class SendFromGmail {
      public static void main(String args[]){
         try{
        String host = "smtp.gmail.com";
        String from = "rageshcv@gmail.com";
        String pass = "mypassword";
        Properties props = System.getProperties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        System.out.println("step 1");
        String[] to = {"rageshcv@outlook.com"};
    
        Session session = Session.getDefaultInstance(props, null);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        InternetAddress[] toAddress = new InternetAddress[to.length];
    
    
        for( int i=0; i < to.length; i++ ) { 
            toAddress[i] = new InternetAddress(to[i]);
        }
        System.out.println(Message.RecipientType.TO);
    
        for( int i=0; i < toAddress.length; i++) {
            message.addRecipient(Message.RecipientType.TO, toAddress[i]);
        }
        message.setSubject("sending in a group");
        message.setText("Welcome to JavaMail");
        Transport transport = session.getTransport("smtp");
        System.out.println("Step 2");
        transport.connect(host, from, pass);
        System.out.println("Step 3");
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
     }
    catch(Exception e){
        e.getMessage();
       }
       }
       }
    
4

1 に答える 1

-1

JavaMail FAQ には、接続の問題をデバッグするためのヒントがあります。試してみましたか?

リンクされたソースから引用されたテキスト:

Q: メールサーバーへの接続に関する問題をデバッグするにはどうすればよいですか?

A: このような問題をデバッグするときに最初に行うことは、それが Java の問題なのかネットワークの問題なのかを判断することです。telnet を使用して、リモート システムへの接続を試みます。たとえば、 という名前の POP3 サーバーに接続できない場合は、次のmail.example.comようにします。

telnet mail.example.com 110

SMTP サーバーに接続しようとしている場合は、ポート番号に 110 ではなく 25 を使用します。IMAP サーバーに接続しようとしている場合は、ポート番号に 143 を使用します。

グリーティング バナーが表示された場合は、簡単に切断できます。これが機能する場合、ネットワーク、ネーム サービス、ファイアウォールなどはすべて正しく設定されており、問題は Java プログラムにある可能性が高いです。

うまくいかない場合は、ネットワーク構成を確認するか、ネットワーク管理者に相談してください。ローカル マシンまたはネットワークにファイアウォールがインストールされていると、サーバーに接続できない場合があります。使用しているホスト名がわからないという telnet のエラーが表示される場合は、ネーム サービス (DNS など) がインターネット ホスト名を解決するように正しく構成されていない可能性があります。これらの問題はいずれも、JavaMail または Java の問題ではありません。

通常、接続時に低レベルの SocketException が発生した場合、問題はネットワーク構成が原因です。通常、これは Java の問題ではありません。

telnet での接続に成功したら、次に行うことは、前述のように、セッション デバッグをオンにして、JavaMail がリモート マシンに接続しようとしたときにプロトコル トレースを取得することです。多くの場合、これにはサーバーからのより詳細なエラー メッセージが含まれ、問題の実際の原因を示します。

于 2013-09-12T17:53:48.457 に答える