当前位置: 首页 > 知识库问答 >
问题:

Javamail-无法连接到SMTP主机

葛哲彦
2023-03-14

我正在尝试从我的java发送电子邮件,但我无法连接到我的主机。这里是我的代码:

public class sendEmail implements Runnable{
     @Override
     public void run(){
        try{
            final String username = "user", password = "pass", from = "from@mail.com", to = "to@mail.com";

            Properties props = new Properties();
            props.setProperty("mail.smtp.user", username);
            props.setProperty("mail.smtp.host", "mail.host.com");
            props.setProperty("mail.smtp.ssl.enable", "true"); 
            props.setProperty("mail.smtp.port", "465");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.debug", "true");
            props.setProperty("mail.smtp.auth", "true");
            props.setProperty("mail.smtp.socketFactory.port", "465");
            props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.setProperty("mail.smtp.socketFactory.fallback", "false");
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);

            Message msg = new MimeMessage(session);
            try{
                msg.setSubject("Test SMTP");
                msg.setFrom(new InternetAddress(from));
                msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
                Transport transport = session.getTransport("smtp");
                transport.connect("mail.itbuntuksemua.com", username, password);
                transport.sendMessage(msg, msg.getAllRecipients());
                transport.close();
                System.out.println("Done");
            }catch(MessagingException | NumberFormatException | HeadlessException ex){
                ex.printStackTrace();
            }
        }catch(UnknownHostException | NumberFormatException ex){
            ex.printStackTrace();
        }
     }
 }

这里是我的SMTPAuthenticator()代码:

private class SMTPAuthenticator extends javax.mail.Authenticator {
    @Override
    public PasswordAuthentication getPasswordAuthentication() {
        String username = "user"; 
        String password = "pass";
        return new PasswordAuthentication(username, password);
    } 
}

这里又是我的报告错误:

有人能帮帮我吗?:(

共有1个答案

单于旭东
2023-03-14

您可能希望尝试下载证书,使用keytool安装它,然后将它们设置为系统变量。如下所示:

>

  • 转到火狐浏览器中的URL,单击HTTPS证书链(URL地址旁边)。单击“详细信息”>“安全性”>“显示证书”>“详细信息”>“导出..”。获取名称并选择文件类型example.der。现在您有了带有keystore的文件,您必须将其添加到JVM
  • 找到文件$JAVA_HOME/jre/lib/security/cacerts
  • 使用以下方法将example.der文件导入cacerts文件:

    sudo keytool -import -alias example -keystore  $JAVA_HOME/jre/lib/security/cacerts -file example.der
    

    默认密钥存储区密码为“changeit

    您可以查看使用此显示证书指纹的命令所做的更改。

    keytool -list -keystore cacerts
    

    如果这不能解决问题,请尝试添加这些java选项作为参数:

    -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts"
    -Djavax.net.ssl.trustStorePassword="changeit"
    

    也可以将它们作为系统变量放在java代码中:

    System.setProperty("javax.net.ssl.trustStore","/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/lib/security/cacerts");
    System.setProperty("javax.net.ssl.trustStorePassword","changeit");
    

  •  类似资料:
    • SMTP错误:无法连接到SMTP主机。无法发送消息。 邮件程序错误:SMTP错误:无法连接到SMTP主机。 我似乎找不到让PHPMailer在CentOS下工作的方法。邮件在XAMPP的Windows下工作正常,但我总是在Linux下遇到这个错误。 SMTP服务器是一个在端口25上侦听的Lotus Domino,CentOS机器根本没有防火墙,奇怪的是,即使是mail()也不能工作。它不返回任何内

    • 问题内容: 以下是我发送邮件的代码: 但是当我运行代码时,它给了我以下异常。 当我ping到它时,它给我的答复没有任何问题。我在用 请帮我解决这个问题。 问题答案: 这是这两行让我感到困扰的问题: 并添加了这一行: 删除并添加以上代码行后,它可以正常工作。

    • 当我从服务器发送电子邮件时,它会给我两个错误- SMTP错误:无法连接到SMTP主机。无法发送邮件。邮件错误:SMTP错误:无法连接到SMTP主机。 我在另一个关于堆栈溢出的答案上找到了很多提示,但都不起作用。我试过465/587/65号端口。如果我设置端口587,下面的代码在本地系统上也能正常工作。但在服务器中,它不起作用。

    • 我正在处理一封使用phpmailer类的Web邮件。问题是我收到错误“SMTP错误:无法连接到SMTP主机。邮件未发送PHP邮件错误:SMTP错误:无法连接到SMTP主机。” 我的代码是: 有人想让我知道我错在哪里,我需要你对这个问题的关注。

    • 我已经开发了一个web应用程序(JSF、Spring、jboss AS7.0.13),用于使用JavaMail1.4和Domino Lotus9.0.1作为邮件服务器通过smtp发送邮件。 已经做了什么: null 发送方法源代码: 在一个简单的java应用程序中使用相同的方法我可以毫无问题地发送邮件,但是,当尝试从我的web应用程序发送邮件时,当然再次使用相同的方法源代码时,我得到了一个异常:

    • 这是我用来发送电子邮件的代码: javax.mail.MessagingException:无法连接到SMTP主机:SMTP.gmail.com,端口:465; 嵌套异常为: java.net.connectException:连接被拒绝 在com.sun.mail.SMTP.smtpransport.openserver(smtpransport.java:1961) 在com.sun.mail