【问题标题】:Could not connect to SMTP host: 10.0.1.9, port: 80, response: -1 when sending email through java通过 java 发送电子邮件时无法连接到 SMTP 主机:10.0.1.9,端口:80,响应:-1
【发布时间】:2014-05-28 15:13:48
【问题描述】:

我正在尝试通过 java 代码发送电子邮件.. 但出现异常.. 我不知道我哪里出错了.. 通过我的公司网络发送它..

public class SendingMail{
  public static void main(String[] args) {
            final String username = "xyz@company.com";
    final String password = "********";
    Properties props = new Properties();
    props.put("mail.smtp.user", "xyz@company.com");
        props.put("mail.smtp.password", "********");
        props.put("mail.smtp.protocol", "smtp");  
        props.put("mail.smtp.host", "10.0.1.9");
        props.put("mail.smtp.port", "80");
        props.put("mail.smtp.starttls.enable","false");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.socketFactory.port", "80");
        props.put("mail.smtp.socketFactory.class", "");
        props.put("mail.smtp.socketFactory.fallback", "false");
    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("dpaleti@avineonindia.com"));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("abc@company.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 mex) {
         mex.printStackTrace();
    }
         }
           }

异常堆栈跟踪是:

     javax.mail.MessagingException: Could not connect to SMTP host: 10.0.1.9, port: 80,      response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1270)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
    at javax.mail.Service.connect(Service.java:275)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)
    at com.ex.mails.SendingMail.main(SendingMail.java:48)

我检查了 telnet 是否连接到我的服务器.. 它连接以及我可以 ping 到 10.0.1.9

将端口号更改为 25。现在我收到以下错误

javax.mail.MessagingException: Could not connect to SMTP host: 10.0.1.9, port: 25;
 nested exception is:
java.net.SocketException: Network is unreachable: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at com.ex.mails.SendingMail.main(SendingMail.java:48)
Caused by: java.net.SocketException: Network is unreachable: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 7 more

【问题讨论】:

  • 你在端口 80 上运行了 smtp - 这令人困惑。
  • 您可以尝试连接到端口 25,这是 SMTP 的正确端口。
  • 是的.. 在提供 telnet 10.0.1.9 8080 时检查 telnet 使用 80 作为连接的端口时出错!!
  • 25 给出错误猜测我的公司网络不允许
  • 刚刚使用 telnet 在 cmd 中检查了端口 25,它连接良好.. 对此感到抱歉,但是当我在代码中更改端口号时,它会给出错误 @MikeW

标签: java email smtp


【解决方案1】:

以下几点可能对你有帮助

  1. 检查 SMTP 服务器是否运行
  2. 如果 SMTP 服务器正在运行,则检查 SMTP 服务器监听的端口(可能是 25,587,465)。 587 用于 StartTLS props.put("mail.smtp.starttls.enable", "true"); 或使用 465 如果启用了 ssl

这是一个可以帮助你的例子http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 2013-02-28
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多