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

Exim и PHPMailer: не могут принять аутентификацию, когда хост - localhost

Моя проблема:

Используя PHPMailer, я не могу отправлять аутентифицированные электронные письма SMTP при использовании localhost Хост. Я не понимаю, почему это так.

Я понимаю, что основная проблема здесь почти наверняка связана с настройками Exim, а не PHPMailer, но я не могу найти никакого рабочего решения для решения этой проблемы.

О моем сервере:

У меня есть собственный сервер с установленным Exim 4.87 и PHPMailer 5.2.16. На сервере около 100 учетных записей, многие со своими списками рассылки и т. Д.

Сервер запускает учетную запись DNS, SMTP и хостинг в одном месте, поэтому сценариям PHP, вызывающим почтовую программу Exim, не нужно покидать сервер, все они локальные.

Попытки исправить:

Симптомы, похожие на Эта проблема. После прочтения этого поста я ослабил настройки Exim, чтобы никто не отправлял электронные письма (PHP) и различные другие разрешения в Exim:

И да, я прочитал Документация PHPMailer относительно неотправленных / неудавшихся писем.

Моя установка PHPMailer (только важные соответствующие биты):

    //$this->Host = "server-hostname.co.uk";     //THis WORKS
    //$this->Host = "account-domain.co.uk"; // this WORKS
    $this->Host = "localhost";  // this FAILS 
    $this->SMTPAuth = true; // Only works on non-localhost Host. 
    //$this->Port = 25; //default. 
    $this->Username = 'email_Address@accountdomain.co.uk';
    $this->Password = '...!...';

Я могу проверить, что правильный порт для TLS - 487, а правильный порт для простого SMTP - 25. Имя пользователя и пароль верны. Подробности выше работают, когда хост НЕ Localhost . Но localhost не принимает никакой аутентификации при отправке.

Моя проблема в том, что для целей проверки электронной почты (и хорошей практики) мне нужно аутентифицировать исходящие электронные письма, но я могу аутентифицировать их только в том случае, если хост является удаленным хостом, а не локальным.

Это для меня вызывает 2-секундная задержка которую я хотел бы удалить. Я понимаю, что задержка возникает как из-за аутентификации, так и из-за SMTPSecure. Этот ответ дает мне указатели на использование localhost для смягчения этой задержки, и это имеет смысл для меня, но каким-то образом установка сервера не принимает это.

У меня стандартная установка PHPMailer с использованием Host->localhost и он работает нормально, за исключением того, что он не использует аутентификацию SMTP или SMTPSecurity.

ОШИБКИ:

(SMTPDebug = 4)
Примечание: извините, доменные имена несовместимы (.com и .co.uk), но вы поняли ...

2016-11-24 14:40:52 Connection: opening to localhost:25, timeout=20, options=array (
                                      )
2016-11-24 14:40:52 Connection: opened
2016-11-24 14:40:52 SMTP -> get_lines(): $data is ""
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "220-serverdomain.com ESMTP Exim 4.87  #1 Thu, 24 Nov 2016 14:40:52 +0000 
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "220-serverdomain.com ESMTP Exim 4.87  #1 Thu, 24 Nov 2016 14:40:52 +0000 
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "220-   We do not authorize the use of this system to transport unsolicited, 
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "220-serverdomain.com ESMTP Exim 4.87  #1 Thu, 24 Nov 2016 14:40:52 +0000 
                                      220-   We do not authorize the use of this system to transport unsolicited, 
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "220    and/or bulk e-mail.
                                      "
2016-11-24 14:40:52 SERVER -> CLIENT: 220-serverdomain.com ESMTP Exim 4.87  #1 Thu, 24 Nov 2016 14:40:52 +0000 
                                      220-   We do not authorize the use of this system to transport unsolicited, 
                                      220    and/or bulk e-mail.
2016-11-24 14:40:52 CLIENT -> SERVER: EHLO www.accountdomain.co.uk
2016-11-24 14:40:52 SMTP -> get_lines(): $data is ""
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-SIZE 52428800
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-8BITMIME
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      250-8BITMIME
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-PIPELINING
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      250-8BITMIME
                                      250-PIPELINING
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-AUTH PLAIN LOGIN
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      250-8BITMIME
                                      250-PIPELINING
                                      250-AUTH PLAIN LOGIN
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250-STARTTLS
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $data is "250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      250-8BITMIME
                                      250-PIPELINING
                                      250-AUTH PLAIN LOGIN
                                      250-STARTTLS
                                      "
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "250 HELP
                                      "
2016-11-24 14:40:52 SERVER -> CLIENT: 250-serverdomain.com Hello www.accountdomain.co.uk [::1]
                                      250-SIZE 52428800
                                      250-8BITMIME
                                      250-PIPELINING
                                      250-AUTH PLAIN LOGIN
                                      250-STARTTLS
                                      250 HELP
2016-11-24 14:40:52 CLIENT -> SERVER: STARTTLS
2016-11-24 14:40:52 SMTP -> get_lines(): $data is ""
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "220 TLS go ahead
                                      "
2016-11-24 14:40:52 SERVER -> CLIENT: 220 TLS go ahead
2016-11-24 14:40:52 SMTP Error: Could not connect to SMTP host.
2016-11-24 14:40:52 CLIENT -> SERVER: QUIT
2016-11-24 14:40:52 SMTP -> get_lines(): $data is ""
2016-11-24 14:40:52 SMTP -> get_lines(): $str is  "221 serverdomain.com closing connection
                                      "
2016-11-24 14:40:52 SERVER -> CLIENT: 221 serverdomain.com closing connection
2016-11-24 14:40:52 Connection: closed
2016-11-24 14:40:52 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Что мне следует изменить в Exim (или в другом месте), чтобы SMTP-аутентификация могла работать на localhost ?

При необходимости я могу показать вам журнал отладки успешных отправок, когда Host->"serverdomain.co.uk"; или Host->"accountdomain.co.uk"; . Ура

РЕДАКТИРОВАТЬ:

OpenSSL включен на PHP.

РЕДАКТИРОВАТЬ 2

Аутентификация файла конфигурации exim (часть)

#BEGIN ACL_NOTQUIT_BLOCK
# BEGIN INSERT ratelimit

# ignore authenticated hosts
 accept authenticated = *

accept hosts = : +recent_authed_mail_ips : +loopback

warn
    #only rate limit port 25
    condition = ${if eq {$received_port}{25}{yes}{no}}
    condition = ${if match {$smtp_notquit_reason}{command}{yes}{no}}
    log_message = "Connection Ratelimit - $sender_fullhost because of notquit: $smtp_notquit_reason ($sender_rate/$sender_rate_period max:$sender_rate_limit)"
    ratelimit = 1.2 / 1h / strict / per_conn


# END INSERT ratelimit

#END ACL_NOTQUIT_BLOCK