1

我正在尝试使用以下程序发送邮件,但收到以下错误消息。

             public class SMTPTest {
    //private Logger log = Logger.getLogger(this.getClass());

    public boolean sendSimpleMail(String to, String subject, String body) {
        Properties props = new Properties();
        props.put("mail.smtp.user", "amrita_test");
        props.put("mail.smtp.password", "aview");
        props.put("mail.smtp.host", "192.168.0.25");
        props.put("mail.smtp.port", "25");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        // props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.debug", "false");
        props.put("mail.smtp.socketFactory.port", "425");
        props.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        try {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            // session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            String content = body;
            msg.setSubject(subject);
            msg.setFrom(new InternetAddress("buddhiedge@gmail.com"));
            Address[] addresses = new Address[1];
            addresses[0] = new InternetAddress("buddhiedge@gmail.com");
            msg.setReplyTo(addresses);
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.setContent(content, "text/html");
            Transport.send(msg);
            return true;
        } catch (Exception mex) {
            mex.printStackTrace();
            System.out.println("Error in sending mail :: " + mex.getMessage());
            return false;
        }
    }

    private class SMTPAuthenticator extends Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("amrita_test",
                    "aview");
        }
    }
    public static void main(String args[]){
        SMTPTest test=new SMTPTest();
        test.sendSimpleMail("praveenpkd@gmail.com", "subject", "body");
    }
}

错误是:javax.mail.MessagingException:无法连接到 SMTP 主机:192.168.0.25,端口:25;

    nested exception is:
    java.net.ConnectException: Connection timed out: 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:297)
    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 SMTPTest.sendSimpleMail(SMTPTest.java:45)
    at SMTPTest.main(SMTPTest.java:62)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
    ... 8 more

但是 SMTP 服务器或连接没有问题。telnet 192.168.0.25 25 连接正常。如何解决这个问题。

4

2 回答 2

1

请尝试通过仅从您的代码中删除以下内容来再次发送邮件。

    props.put("mail.smtp.socketFactory.port", "425");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

通常情况下,异常

java.net.ConnectException:连接超时

仅当 java 邮件无法连接到指定端口中提到的服务器时才会导致。最可能的原因是 java 邮件尝试连接到会话属性中指定的 425 端口。

于 2017-02-27T10:49:47.370 回答
0

如果这是一个身份验证问题,我相信你会得到一个不同的错误。

您的网络/SMTP 服务器是否支持 IP6?如果您的客户端支持 IP6,Java 的更高版本默认为 IP6,但许多 SMTP 服务器配置在 IP4 上。有关配置 JVM 以强制 IP4 的说明,请参阅此处使用 JSP 发送电子邮件的这篇文章。这需要在 JVM 上进行设置,因为它是实例化的。

于 2013-05-08T00:18:16.000 回答