Java邮件SMTP连接问题

3
我正在尝试使用从这里获取的SSL示例发送电子邮件,并将其更改为以下凭据,但遇到了如下异常。请帮我解决这个问题。
import javax.mail.*;
import javax.mail.internet.*;

import java.util.Properties;


public class SimpleSSLMail {

    private static final String SMTP_HOST_NAME = "xx.xx.xx.xx";
    private static final int SMTP_HOST_PORT = 25 ;//465;
    private static final String SMTP_AUTH_USER = "xxx@yyy.com";
    private static final String SMTP_AUTH_PWD  = "xxxx";

    public static void main(String[] args) throws Exception{
       new SimpleSSLMail().test();
    }

    public void test() throws Exception{
        Properties props = new Properties();

        props.put("mail.transport.protocol", "smtps");
        props.put("mail.smtps.host", SMTP_HOST_NAME);
        props.put("mail.smtps.auth", "true");
        // props.put("mail.smtps.quitwait", "false");

        Session mailSession = Session.getDefaultInstance(props);
        mailSession.setDebug(true);
        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);
        message.setSubject("Testing SMTP-SSL");
        message.setContent("This is a test", "text/plain");

        message.addRecipient(Message.RecipientType.TO,
             new InternetAddress("myid@gmail.com"));

        transport.connect
          (SMTP_HOST_NAME, SMTP_HOST_PORT, SMTP_AUTH_USER, SMTP_AUTH_PWD);

        transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
        transport.close();
    }
}

异常:

Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host:xx.xx.xx.xx, port: 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:275)

3
错误信息很直白,很可能是网络问题。你能验证一下吗? - amal
尝试使用 Telnet 连接 SMTP,如果还有其他方式来检查连接、用户名和密码,请告诉我。 - Gopal
如果您无法使用telnet,可以轻松地设置一个邮件客户端来使用这些凭据指向它并进行检查。 - Caps
好的,主机是可达的吗?你的系统是否使用代理连接到主机? - amal
@caps: 我可以使用 Telnet 进行连接 amal: 请告诉我如何检查系统是否使用代理连接 - Gopal
取决于您的操作系统。在Windows中,我猜我可以从控制面板打开连接选项卡并检查是否定义了代理。无论如何,如果您正在使用代理,您需要在代码中指定它。使用Google。您需要类似于http://zone817.blogspot.com/2010/08/reading-from-url-using-java-program_02.html的东西。 - amal
1个回答

3
这种问题是由于网络问题引起的。可能需要身份验证,您可能有错误的用户名、密码。
无论如何,您的代码中缺少很多内容。 获取与Gmail服务器的正确SSL连接示例
props.put("mail.smtp.socketFactory.port", "465");
 props.put("mail.smtp.socketFactory.class",
                           "javax.net.ssl.SSLSocketFactory");
 props.put("mail.smtp.auth", "true");
 props.put("mail.smtp.port", "465");

我在你的代码中没有看到这个方法。那么认证的方法在哪里?
只需查看以下链接: 使用Java发送Gmail电子邮件 这里您可以选择使用TLS或SSl Java Mail API 通过Java发送电子邮件 用于参考的Java邮件系统中使用的密钥

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接