2011-08-16 26 views
2

以下のコードは、SSLを使用してSTMP経由で電子メールを送信するために正常に動作します。 SMTPがTSLに変更されました。メールは送信されません。 私はTSLでSMTP経由で電子メールを送信

props.put("mail.smtp.starttls.enable","true"); 

を追加するようないくつかのことを試してみましたが、それは全く使用しません。

エラーコードは言う:

「javax.mail.MessagingException:SMTPホストに接続できませんでした:exch.studi.fhws.de、ポート:587; ネストされた例外は次のとおりです。 持つjavax.net.ssl .SSLException:認識されないSSLメッセージ、平文接続? "

アイデア?これは、接続が得る-行くからSSLであることを有することを意味するSSL対応の電子メールポート、である -

import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 

public class SendMail 
{ 
String d_email = "...", 
password = "...", 
host = "...", 
port = "25", 
mailTo = "...", 
mailSubject = "test", 
mailText = "test"; 

public SendMail() 
{ 
    Properties props = new Properties(); 
    props.put("mail.smtp.user", d_email); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.port", port); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.socketFactory.port", port); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

    SecurityManager security = System.getSecurityManager(); 

    try 
    { 
     Authenticator auth = new SMTPAuthenticator(); 
     Session session = Session.getInstance(props, auth); 

     MimeMessage msg = new MimeMessage(session); 
     msg.setText(mailText); 
     msg.setSubject(mailSubject); 
     msg.setFrom(new InternetAddress(d_email)); 
     msg.addRecipient(Message.RecipientType.TO, new InternetAddress(mailTo)); 
     Transport.send(msg); 
    } 
    catch (Exception mex) 
    { 
     mex.printStackTrace(); 
    } 
} 

public static void main(String[] args) 
{ 
    TextClass tc = new TextClass(); 
} 

private class SMTPAuthenticator extends javax.mail.Authenticator 
{ 
    public PasswordAuthentication getPasswordAuthentication() 
    { 
     return new PasswordAuthentication(d_email, password); 
    } 
} 
} 
+0

ルック:http://blogs.oracle.com/apanicker/entry/java_code_for_smtp_server – Marcelo

+0

おかげで、コード上記は同じです - 私はこの例を使用しました。 – nerc

答えて

0

エラーメッセージは、ポート587に接続していると言います。あなたのコードはプレーンテキスト(例:プレーンポート25)で接続していて、次にTLSを開始しようとしています。これは、ポート587が "EHLO .../STARTTLS" plaintextコマンドセットではなく、すぐにSSL交換を期待するため、動作しません。無効なSMTPポートとExchangeサーバーの話

+0

ありがとう、エラーメッセージに記載されているポート587は、ポートを編集した別の試行からのものでした。だからあなたはポート自体が問題だと思いますか、それとも他のものがあるかもしれませんか?私は25,265と587のようにたくさん試しました。 – nerc