Javamail:电子邮件已成功从程序中发出但未送达 Windows Server 2012 r2

Javamail:电子邮件已成功从程序中发出但未送达 Windows Server 2012 r2

我被这个问题严重困扰了。

我的程序成功地从我的 Windows 10 PC 和 Windows Server 2012 R2 Essential 发送电子邮件,但通过任何其他Windows Server 2012 版本显示发送成功,但电子邮件尚未送达。

尝试过所有组合SSL/TLS/无需身份验证以及所有端口465/587/26。

这是我正在使用的代码

    String port = "26";
    // Recipient's email ID needs to be mentioned.
    String to = "*****@gmail.com";

    // Sender's email ID needs to be mentioned
    String host = "mail.*****.com.pk";
    String username = "sales@*****.com.pk";//change accordingly
    String password = "*****";//change accordingly

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", port);
    // SSL Factory
    // props.put("mail.smtp.socketFactory.class",
    //           "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.starttls.enable", "false");

    System.out.println("TLS Settings False");
    System.out.println("Sending with port: " + port);

    // Get the Session object.
    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });

    try {
        // Create a default MimeMessage object.
        Message message = new MimeMessage(session);

        // Set From: header field of the header.
        message.setFrom(new InternetAddress(username));

        // Set To: header field of the header.
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));

        // Set Subject: header field
        message.setSubject("Testing Subject from ******.com.pk");

        // Now set the actual message
        message.setText("Hello, this is sample for to check send " +
                "email using JavaMailAPI on personal workstation ");

        // Send message
        Transport.send(message);

        System.out.println("Sent message successfully....");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

我也尝试使用 Jodd Mail Library,它复制了同样的情况,这让我有理由相信操作系统是这里的问题

答案1

通常情况下,您会使用端口 465(隐式 TLS)或 587(显式 TLS/“STARTTLS”,或者,如果有必要,使用未加密提交)。端口 25(而不是 26)应用于邮件服务器之间的通信。

在对 MTA 接受但未送达收件人的邮件进行故障排除时,重要的问题是,从同一服务器发送的其他邮件的投递率如何,尤其是发送到显然会丢弃来自您的程序的邮件的同一域的其他邮件。

您可以通过多种方式来提高传递率,首先是安全的邮件服务器配置(即不成为垃圾邮件的来源),然后在 DNS+MTA 中正确应用 SPF、DKIM 和 DMARC 记录/标头。

相关内容