12

マイコード:

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMailTLS {
public static void main(String[] args) {
    final String username = "myemailid@gmail.com";
    final String password = "myemailpassword";
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");
    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
      });

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("myemailid@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("myfriedemail@ymail.com"));
        message.setSubject("Testing Subject");
        message.setText("Dear Mail Crawler,"+
 "\n\n No spam to my email,please!"); 
        Transport.send(message);
        System.out.println("Done");
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}
}

私のエラー:

スレッド「メイン」での例外 java.lang.RuntimeException: javax.mail.MessagingException:
不明な SMTP ホスト: smtp.gmail.com;
ネストされた例外:
java.net.UnknownHostException: smtp.gmail.com
at Mail.SendMailTLS.main(SendMailTLS.java:56)
原因: javax.mail.MessagingException: Unknown SMTP host: smtp.gmail.com;
ネストされた例外は次のとおりです:
java.net.UnknownHostException:
com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1970)
の smtp.gmail.com :642)
javax.mail.Service.connect(Service.java:317)
で javax.mail.Service.connect(Service.java:176) で
javax.mail.Service.connect(Service.java:125)
で javax.mail.Transport.send0(Transport.java:194)
で javax.mail.Transport.send(Transport.java:124)
で Mail.SendMailTLS。 main(SendMailTLS.java:51)
原因: java.net.UnknownHostException: smtp.gmail.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java: 366)
java.net.Socket.connect(Socket.java:525)
で java.net.Socket.connect(Socket.java:475)
で com.sun.mail.util.SocketFetcher.createSocket( SocketFetcher.java:319) で)
com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233) で
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
... 7 以上
Java 結果: 1

ローカル プロキシを 172.17.0.4:8080 として、 ユーザー名をuser1、パスワードをuser2として使用しています。

4

6 に答える 6

14

このサーバーを試してください:

smtp.googlemail.com

于 2012-04-10T09:51:51.497 に答える
12

プロキシを使用している場合、Java Mail は使用できないと思います。

出典:oracle.com

Q: JavaMail をプロキシ サーバー経由で動作するように設定するにはどうすればよいですか?

A: JavaMail は現在、Web プロキシ サーバーを介したメール サーバーへのアクセスをサポートしていません。プロキシ サーバーを使用する主な理由の 1 つは、企業ネットワーク内からの HTTP 要求が企業ファイアウォールを通過できるようにすることです。通常、ファイアウォールはインターネットへのほとんどのアクセスをブロックしますが、プロキシ サーバーからの要求は通過させます。さらに、企業ネットワーク内のメール サーバーは電子メールに対して同様の機能を実行し、SMTP 経由でメッセージを受け入れてインターネット上の最終的な宛先に転送し、着信メッセージを受け入れて適切な内部メール サーバーに送信します。


アップデート

Q: JavaMail をプロキシ サーバー経由で動作するように設定するにはどうすればよいですか? [更新しました!]

A: JavaMail 1.6.0 から、JavaMail は Web プロキシ サーバーを介したメール サーバーへのアクセスをサポートします。プロキシ サーバーの「mail.protocol.proxy.host」および「mail.protocol.proxy.port」プロパティを設定します。プロキシ サーバー BASIC 認証は、「mail.protocol.proxy.user」および「mail.protocol.proxy.password」プロパティを設定することでサポートされます。

さらに、プロキシ サーバーが SOCKS V4 または V5 プロトコル ( http://www.socks.nec.com/aboutsocks.html、RFC1928) をサポートし、匿名接続を許可し、JDK 1.5 以降および JavaMail 1.4 を使用している場合.5 以降では、com.sun.mail.smtp パッケージの javadoc で説明されているように、「mail.smtp.socks.host」プロパティを設定することにより、セッションごと、プロトコルごとに SOCKS プロキシを構成できます。「imap」および「pop3」プロトコルにも同様のプロパティが存在します。SOCKS サーバーの認証は、「java.net.socks.username」および「java.net.socks.password」システム プロパティを設定することにより、JDK によってサポートされます (したがって、すべての SOCKS 接続に適用されます)。 .

古いバージョンの JDK または JavaMail を使用している場合は、すべての TCP ソケット接続を SOCKS サーバーに転送するよう Java ランタイムに指示できます。SocksProxyHost プロパティと SocksProxyPort プロパティの最新のドキュメントについては、Networking Properties ガイドを参照してください。これらは、JavaMail セッション プロパティではなく、システム レベルのプロパティです。これらは、アプリケーションの起動時にコマンド ラインから設定できます。たとえば、 java -DsocksProxyHost=myproxy .... この機能を使用して、SMTP、IMAP、および POP3 通信を JavaMail から SOCKS プロキシ サーバーに転送できます。これらのプロパティを設定すると、すべての TCP ソケットが SOCKS プロキシに転送されるため、アプリケーションの他の側面に悪影響を及ぼす可能性があることに注意してください。

古いバージョンの JavaMail を使用していて、そのような SOCKS サーバーがなくても、JavaMail を使用してファイアウォールの外側のメール サーバーに間接的にアクセスしたい場合は、connect などのプログラムを使用して、HTTP プロキシ サーバーを介して TCP 接続をトンネリングできる場合があります。接続インスタンスを SOCKS サーバーとして使用するように JavaMail を構成します。

于 2012-04-10T10:15:13.577 に答える
1

開発目的のためだけに、プロキシ経由でsmtp.gmail.comへのトンネルを開くことができます

proxytunnel -q -p proxy_host:proxy_port -d smtp.gmail.com:465 -a local_port

コードで使用します

props.put("mail.smtp.host", "localhost");
props.put("mail.smtp.port", "local_port");
于 2012-04-26T15:18:53.400 に答える
1

props.put("mail.smtp.host", "gmail.com");smtp.gmail.com なしで試していただけますか

于 2012-04-10T09:13:36.533 に答える