Назад | Перейти на главную страницу

Javamail: электронная почта успешно удаляется из программы, но не доставляется Windows Server 2012 r2

Я сильно застрял в этой проблеме.

Моя программа успешно доставляет электронные письма с моего ПК с Windows 10 и 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, которая воспроизводит ту же ситуацию, что дает мне основания полагать, что проблема здесь в ОС.

Обычно вы используете порт 465 (неявный TLS) или 587 (явный TLS / «STARTTLS» или, если необходимо, незашифрованное представление). Порт 25 (а не 26) следует использовать для трафика между почтовыми серверами.

Важный вопрос при устранении неполадок с почтой, которая принимается вашим MTA, но не доставляется получателю, заключается в том, как скорость доставки будет выглядеть для другой почты, отправленной с того же сервера, и особенно в тот же домен, который явно отклоняет почту из вашей программы.

Есть ряд вещей, которые вы можете сделать для повышения доставляемости, начиная с конфигурации защищенного почтового сервера (т.е. не являющегося источником спама), а затем правильно применяемых записей / заголовков SPF, DKIM и DMARC в вашем DNS + MTA.