Exim e PHPMailer: não aceita autenticação quando host é localhost

1

Meu problema:

Usando o PHPMailer, não consigo enviar emails SMTP autenticados ao usar o host localhost . Não consigo ver por que isso acontece.

Eu percebo que a raiz principal do problema aqui é quase certamente uma configuração no Exim, em vez do PHPMailer, mas não consigo encontrar nenhuma solução funcional para resolver isso.

Sobre o meu servidor:

Eu tenho meu próprio servidor que possui o Exim 4.87 configurado e o PHPMailer 5.2.16. O servidor tem cerca de 100 contas, muitas com suas próprias listas de discussão, etc.

O servidor executa a conta DNS, SMTP e hospeda todos no mesmo local, portanto, os scripts PHP que chamam o Mailer Exim não precisam sair do servidor, são todos locais.

Tenta corrigir:

Sintomas semelhantes a este problema . Depois de ler este post, eu relaxei as configurações do Exim para permitir emails de ninguém (PHP) e várias outras permissões no Exim:

  • Permitir envio de email de Nobody = ON
  • Confie nos cabeçalhos X-PHP-Script para determinar o remetente do email enviado dos processos em execução como nobody = ON
  • Requer remoto (nome do host / endereço IP) HELO = OFF
  • Exigir que as conexões SMTP de entrada enviem um HELO que não corresponda aos domínios locais desse servidor. = OFF

E sim, eu li a documentação do PHPMailer sobre e-mails não enviados / com falha.

Minha configuração do PHPMailer (somente os bits relevantes importantes):

    //$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 protected]';
    $this->Password = '...!...';

Eu posso verificar se a porta correta para TLS é 487 e a porta correta para SMTP simples é 25. O nome de usuário e a senha estão corretos. Os detalhes acima funcionam quando o host NÃO é Localhost . Mas localhost não aceita nenhuma autenticação de envio.

Meu problema é que, para fins de verificação de e-mail (e boas práticas), preciso autenticar os e-mails enviados, mas só posso autenticá-los se o host for um host remoto e não o host local.

Isso para mim faz um segundo atraso que eu gostaria de remover. Eu percebo que o atraso vem da autenticação, bem como de SMTPSecure . Esta resposta me dá dicas sobre como usar o host local para atenuar esse atraso, e isso faz todo o sentido para mim, mas de alguma forma a configuração do servidor é não aceitando isso.

Eu tenho uma configuração padrão do PHPMailer usando Host->localhost e ela funciona bem, exceto que ela não usa autenticação SMTP ou SMTPSecurity.

ERROS:

(SMTPDebug = 4)
Nota: Desculpas dos nomes de domínio são inconsistentes (.com e .co.uk) mas você tem a idéia ...

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

O que devo alterar no Exim (ou em outro lugar) para que a autenticação SMTP possa funcionar em localhost ?

Se necessário, posso mostrar o log de Depuração de envios bem-sucedidos quando Host->"serverdomain.co.uk"; ou Host->"accountdomain.co.uk"; . Felicidades

EDITAR:

O OpenSSL está habilitado no PHP.

EDIT 2

Autenticação do arquivo Exim conf (parte de)

#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
    
por Martin 24.11.2016 / 15:46

0 respostas

Tags