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:
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