Java,无法在linux上发送邮件

标签 java linux email gmail

使用我的家用电脑,我可以通过 Gmail 无误地发送电子邮件,但是,当我尝试在我的 Linux 机器上运行相同的代码时,它会抛出:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2182)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:726)
    at javax.mail.Service.connect(Service.java:388)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:195)
    at javax.mail.Transport.send0(Transport.java:254)
    at javax.mail.Transport.send(Transport.java:124)
    at io.paratek.updates.util.Mail.sendMail(Mail.java:34)
    at io.paratek.updates.MailTest.main(MailTest.java:8)

我的代码

public class Mail {

public static void sendMail(String subject, String contents, String to) {

    Properties props = System.getProperties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    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.getInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("myemail", "mypasswd");
                }
            });

    try {

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(to));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        message.setSubject(subject);
        message.setText(contents);
        Transport.send(message);

        System.out.println("Sent message successfully....");
    } catch (MessagingException mex) {
        mex.printStackTrace();
    }

}

}

我在两个系统上都使用 Oracle JDK 181。 我能够在 Linux 机器上成功连接“telnet smtp.gmail.com 465”

最佳答案

切换到 TLS 后就可以了

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.ssl.trust", "smtp.gmail.com");

关于Java,无法在linux上发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583902/

相关文章:

Linux命令排序问题

Java邮件API : Accessing "All Mail" folder of GMAIL mailbox

python - Airflow - 使用 AWS SES 发送电子邮件

Android - 如何通过检查已发送的项目来确定是否发送了电子邮件

java - 递归到非递归,现在困扰我一段时间

java - JDBC 连接关闭

java - Torquebox 上的 Jruby Rails 调用 EJB 服务 - 模型类

c - 4 个子进程之间的管道通信仅在第一次有效

java - 访问控制异常(java.net.SocketPermission 127.0.0.1 :8080 connect, 解析)

linux - 使用 sendmail 时如何更改发件人姓名(不是电子邮件地址,而是显示的名称)