8

以下は、メールを送信するための私のコードです:

import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
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 SendMail {
    public void sendMail(String m_from,String m_to,String m_subject,String m_body){
      try {
            Session m_Session;
            Message m_simpleMessage;
            InternetAddress m_fromAddress;
            InternetAddress m_toAddress;
            Properties m_properties;

            m_properties     = new Properties();
            m_properties.put("mail.smtp.host", "usdc2spam2.slingmedia.com"); 
            m_properties.put("mail.smtp.socketFactory.port", "465");
            m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
            m_properties.put("mail.smtp.auth", "true");
            m_properties.put("mail.smtp.port", "9000");

            m_Session=Session.getDefaultInstance(m_properties,new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("aaaaa","bbbbb@1"); // username and the password
                }
            });

            m_simpleMessage  =   new MimeMessage(m_Session);
            m_fromAddress    =   new InternetAddress(m_from);
            m_toAddress      =   new InternetAddress(m_to);

            m_simpleMessage.setFrom(m_fromAddress);
            m_simpleMessage.setRecipient(RecipientType.TO, m_toAddress);
            m_simpleMessage.setSubject(m_subject);

            m_simpleMessage.setContent(m_body, "text/html");

            //m_simpleMessage.setContent(m_body,"text/plain");

            Transport.send(m_simpleMessage);
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
    }
    public static void main(String[] args) {
      SendMail send_mail    =   new SendMail();
      String empName = "xxxxx";
      String title ="<b>Hi !"+empName+"</b>";
      send_mail.sendMail("123erft@slingmedia.com", "abz@gmail.com", "Please apply for leave for the following dates", title+"<br>by<br><b>HR<b>");
    }
}

しかし、コードを実行すると、次の例外が発生します。

javax.mail.MessagingException: Could not connect to SMTP host: usdc2spam2.slingmedia.com, port: 9000;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at samples.SendMail.sendMail(SendMail.java:46)
    at samples.SendMail.main(SendMail.java:55)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)

これをpingするとusdc2spam2.slingmedia.com、問題なく応答します。私は使っているwindows 7

これを解決するのを手伝ってください。

4

4 に答える 4

6

これは私に問題を投げかけていたこれらの2行です:

m_properties.put("mail.smtp.socketFactory.port", "465");
  m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

そして次の行を追加しました:

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

上記のコード行を削除して追加すると、正常に機能しました。

于 2012-06-14T11:39:35.667 に答える
4

問題の原因は、スタックトレースにあります。

java.net.ConnectException: Connection refused: connect

SMTPサーバーに接続するためにパスワードが必要ですか?(ポート番号のように)正しい設定を使用していることを確認しますか?プロキシまたはファイアウォールの背後にいますか?これらの設定を通常のメールプログラム(Thunderbirdなど)で使用してメールを送信できますか?

于 2012-06-14T08:41:40.777 に答える
2

この例外は通常、接続しようとしているポートでリッスンしているサービスがない場合に発生します。

puttyまたはを使用して接続してみてくださいtelnet。同じエラーが発生することは間違いありません。

これらを確認します。

  • 接続しようとしているホスト名とポート、
  • サーバーは正しくリッスンしており、
  • 接続をブロックするファイアウォールはありません。
于 2012-06-14T11:07:58.617 に答える
2

Windows ファイアウォールの受信規則にポート 9000 を追加してみてください。

于 2012-06-14T08:44:50.417 に答える