Простая Почта Java.Не удается установить имя локального хоста в EHLO (Как установить mail.smtp.localhost?) - PullRequest
0 голосов
/ 24 февраля 2019

Я использую библиотеку Simple Java Mail (http://www.simplejavamail.org) в своей программе и хочу указать имя локального хоста, которое должно отправляться в EHLO при отправке электронной почты. Я пытался сделать это так:

Properties props = new Properties();
props.put("mail.smtp.sendpartial", "true");
props.put("mail.smtp.host", "smtp.mail.ru");
props.put("mail.smtp.localhost", "mail.ru");

Mailer mailer = MailerBuilder
        .withSMTPServer(server, port, login, password)
        .withTransportStrategy(TransportStrategy.SMTPS)
        .withSessionTimeout(10 * 1000)
        .clearEmailAddressCriteria()
        .withProperties(props)
        .withDebugLogging(true)
        .buildMailer();

Как вы можете видеть в коде, у меня теперь должен быть "mail.ru" в EHLO, но этого не происходит, я продолжаю иметь имя моего компьютера. Я вижу следующее в журнале:

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.mail.ru", port 465, isSSL true
220 smtp46.i.mail.ru ESMTP ready (Looking for Mail for your domain? Visit https://biz.mail.ru)
DEBUG SMTP: connected to host "smtp.mail.ru", port: 465

EHLO MyComputersName
250-smtp46.i.mail.ru
250-SIZE 73400320
250-8BITMIME
250-PIPELINING
250 AUTH PLAIN LOGIN XOAUTH2
DEBUG SMTP: Found extension "SIZE", arg "73400320"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN XOAUTH2"
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded

Что я делаю не так? Как настроить mail.smtp.localhost?

1 Ответ

0 голосов
/ 25 февраля 2019

Если SSL включен, попробуйте либо mail.smtps.localhost, либо mail.smtps.localaddress.в противном случае можно использовать mail.smtp.localhost или mail.smtp.localaddress.

В вашем случае используется TransportStrategy.SMTPS, что означает, что SSL включен явно, поэтому mail.smtp.localhost для простого соединения НЕ будет работать.

Ниже приведена моя ссылка [вставить из файла класса SMTPTransport]:

public synchronized String getLocalHost() {
        if(this.localHostName == null || this.localHostName.length() <= 0) {
            ***this.localHostName = this.session.getProperty("mail." + this.name + ".localhost");***
        }

        if(this.localHostName == null || this.localHostName.length() <= 0) {
            ***this.localHostName = this.session.getProperty("mail." + this.name + ".localaddress");***
        }

        InetAddress localHost;
        try {
            if(this.localHostName == null || this.localHostName.length() <= 0) {
                localHost = InetAddress.getLocalHost();
                this.localHostName = localHost.getCanonicalHostName();
                if(this.localHostName == null) {
                    this.localHostName = "[" + localHost.getHostAddress() + "]";
                }
            }
        } catch (UnknownHostException var2) {
            ;
        }

        if((this.localHostName == null || this.localHostName.length() <= 0) && this.serverSocket != null && this.serverSocket.isBound()) {
            localHost = this.serverSocket.getLocalAddress();
            this.localHostName = localHost.getCanonicalHostName();
            if(this.localHostName == null) {
                this.localHostName = "[" + localHost.getHostAddress() + "]";
            }
        }

        return this.localHostName;
}

...