Javamail不发送邮件

Javamail不发送邮件,java,jakarta-mail,Java,Jakarta Mail,我正在开发一个Java应用程序,我正在使用Javamail发送邮件。我的代码如下: Properties props = new Properties(); props.put("mail.smtp.host", "diana.cartif.es"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory

我正在开发一个Java应用程序,我正在使用Javamail发送邮件。我的代码如下:

Properties props = new Properties();
props.put("mail.smtp.host", "diana.cartif.es");
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");

Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("alerts","pass");
        }
    });

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("alerts@cartif.es"));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("campus21@cartif.es"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," +"\n\n No spam to my email, please!");

Transport.send(message);
但是,当我执行此代码时,它会引发一个异常:

javax.mail.MessagingException: Could not connect to SMTP host: diana.cartif.es, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1960)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    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 com.cartif.data.MainConnection.getFTPConnection(MainConnection.java:106)
    at com.cartif.main.Main.connectToServer(Main.java:72)
    at com.cartif.main.Main.main(Main.java:60)
要连接的数据是正确的,因为我在邮件服务器中检查了它。有人能帮我吗


谢谢

试试这样的方法:

     String  d_email = "email",
             d_password = "pass";

    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.server");
    props.put("mail.smtp.user", d_email);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", port);

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

摆脱socketFactory*属性。在大多数情况下,它们不再需要,并添加

props.put("mail.smtp.ssl.enable", true);
请尝试拨打:

session.setDebug(true);
看看有没有什么有用的


如果您使用的是自签名证书,请查看:

最后,我使用以下属性解决问题:

props.setProperty("mail.smtp.host", "smpt.host");
props.setProperty("mail.smtp.starttls.enable", "false");
props.setProperty("mail.smtp.port","25");
props.setProperty("mail.smtp.user", "alerts");
props.setProperty("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props);
session.setDebug(true);

MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("mail1@mail.es"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("mail2@mail.es"));
message.setSubject("Subject");
message.setText("Text");

Transport t = session.getTransport("smtp");
t.connect("user","pass");
t.sendMessage(message,message.getAllRecipients());
t.close();

您能否从运行应用程序的计算机解析并ping该主机?你能远程登录到465端口的主机并发出HELO命令吗?是的,工作正常。我可以ping,也可以通过telnet连接。当然,我在Thunderbird中接收邮件,所以服务器工作正常。您使用了错误的用户/密码,或者该用户没有足够的权限发送电子邮件alerts@cartif.es. 也许是防火墙问题。@JoseHdez你有代理吗?你真的能远程登录465并输入HELO吗?您不应该能够这样做,因为SMTPS连接是加密的,所以telnet客户端不应该工作。如果您可以远程登录,请尝试运行EHLO命令。如果在列表中看到STARTTLS,则需要使用props.putmail.smtp.STARTTLS.enable,true;