Exim nem sempre envia nome de usuário/senha AUTH LOGIN

Exim nem sempre envia nome de usuário/senha AUTH LOGIN

Estamos enviando e-mails usando exim (configurado através de WHM). Com a mesma configuração exata, aparentemente na maioria das vezes o exim envia o nome de usuário e senha AUTH LOGIN corretos, porém às vezes ele omite esta parte e o sendgrid recusa com o seguinte erro:

host smtp.sendgrid.net [158.85.10.138]
SMTP error from remote mail server after MAIL FROM:<info@*******.net> SIZE=2048:
550 Unauthenticated senders not allowed

Aprofundando-me nisso, posso reproduzir o problema (nem sempre, às vezes) com o seguinte:

# exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.

Estas são as configurações do exim:

Seção: AUTH

sendgrid_login:
  driver = plaintext
  public_name = LOGIN
  client_send = : ******** : **************

Seção: ROUTERSTART

send_via_sendgrid:
  driver = manualroute
  domains = ! +local_domains
  transport = sendgrid_smtp
  route_list = "* smtp.sendgrid.net::587 byname"
  host_find_failed = defer
  no_more

Seção: TRANSPORTESTART

sendgrid_smtp:
  driver = smtp
  hosts = smtp.sendgrid.net
  hosts_require_auth = smtp.sendgrid.net
  hosts_require_tls = smtp.sendgrid.net
  authenticated_sender_force = true

Quando funciona, este é o log:

LOG: MAIN
  cwd=/home/** 3 args: exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.
LOG: MAIN
  <= **@****-**.com U=jf P=local S=354 T="Test exim"
**@****-** [~]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWZy-0005re-S3
delivering 1ZjWZy-0005re-S3
Transport port=25 replaced by host-specific port=587
Connecting to smtp.sendgrid.net [198.37.144.212]:587 ... connected
  SMTP<< 220 ismtpd-064 ESMTP service ready
  SMTP>> EHLO **.****-**.com
  SMTP<< 250-**.***.26.157
         250-SIZE 20480000
         250-STARTTLS
         250-AUTH PLAIN LOGIN
         250-8BITMIME
         250-PIPELINING
         250 AUTH=PLAIN LOGIN
  SMTP>> STARTTLS
  SMTP<< 220 Begin TLS negotiation now
  SMTP>> EHLO **.****-**.com
  SMTP<< 250-**.***.26.157
         250-8BITMIME
         250-SIZE 20480000
         250-AUTH=PLAIN LOGIN
         250-AUTH PLAIN LOGIN
         250 PIPELINING
  SMTP>> AUTH LOGIN
  SMTP<< 334 VXNlcm5hbWU6
  SMTP>> ****
  SMTP<< 334 UGFzc3dvcmQ6
  SMTP>> ********************
  SMTP<< 235 Authentication successful.
  SMTP>> MAIL FROM:<**@****-**.com> SIZE=1388 AUTH=**@****-**.com
  SMTP>> RCPT TO:<**@****.com>
  SMTP>> DATA
  SMTP<< 250 Sender address accepted
  SMTP<< 250 Recipient address accepted
  SMTP<< 354 Continue
  SMTP>> writing message and terminating "."
  SMTP<< 250 Delivery in progress
  SMTP>> QUIT
LOG: MAIN
  => **@****.com R=send_via_sendgrid T=sendgrid_smtp H=smtp.sendgrid.net [198.37.144.212] X=TLSv1.2:AES128-GCM-SHA256:128 A=sendgrid_login C="250 Delivery in progress"
LOG: MAIN
  Completed

Preste atenção especial na linha SMTP>> AUTH LOGINe nos seis logo abaixo, terminando na 235 Authentication successful.linha.

Aqui está uma falha:

LOG: MAIN
  cwd=/home/** 3 args: exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.
LOG: MAIN
  <= **@****-**.com U=jf P=local S=340 T="Test exim"
**@****-** [~]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWjO-0006T8-Eq
delivering 1ZjWjO-0006T8-Eq
Transport port=25 replaced by host-specific port=587
Connecting to smtp.sendgrid.net [198.37.144.225]:587 ... connected
  SMTP<< 220 ismtpd-078 ESMTP service ready
  SMTP>> EHLO ****-**.com
  SMTP<< 250-**.***.157
         250-SIZE 20480000
         250-STARTTLS
         250-AUTH PLAIN LOGIN
         250-8BITMIME
         250-PIPELINING
         250 AUTH=PLAIN LOGIN
  SMTP>> STARTTLS
  SMTP<< 220 Begin TLS negotiation now
  SMTP>> EHLO ****-**.com
  SMTP<< 250-**.***.26.157
         250-8BITMIME
         250-SIZE 20480000
         250-AUTH=PLAIN LOGIN
         250-AUTH PLAIN LOGIN
         250 PIPELINING
  SMTP>> MAIL FROM:<**@****-**.com> SIZE=1374
  SMTP>> RCPT TO:<**@****.com>
  SMTP>> DATA
  SMTP<< 550 Cannot receive from specified address <**@****-**.com>: Unauthenticated senders not allowed
  SMTP<< 503 Must have sender before recipient
  SMTP<< 503 Must have valid receiver and originator
  SMTP>> QUIT
LOG: MAIN
  ** **@****.com R=send_via_sendgrid T=sendgrid_smtp H=smtp.sendgrid.net [198.37.144.225] X=TLSv1.2:AES128-GCM-SHA256:128: SMTP error from remote mail server after MAIL FROM:<**@****-**.com> SIZE=1374: 550 Cannot receive from specified address <**@****-**.com>: Unauthenticated senders not allowed
LOG: MAIN
  cwd=/var/spool/exim 8 args: /usr/sbin/exim -v -t -oem -oi -f <> -E1ZjWjO-0006T8-Eq
LOG: MAIN
  <= <> R=1ZjWjO-0006T8-Eq U=mailnull P=local S=1383 T="Mail delivery failed: returning message to sender"
LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWjn-0006TR-BX
delivering 1ZjWjn-0006TR-BX
LOG: MAIN
  Completed
LOG: MAIN
  => ** <**@****-**.com> R=localuser T=local_delivery
LOG: MAIN
  Completed

Observe que SMTP>> AUTH LOGINas seis linhas seguintes não são chamadas...?

A questão é: por que o exim omite a SMTP>> AUTH LOGINparte real da solicitação, mas apenas algumas vezes? Está usando oexatamente o mesmoconfiguração de conexão (você pode vê-la referenciada em ambos os logs como R=send_via_sendgrid T=sendgrid_smtp).

Responder1

EDITAR 8 de novembro de 2015:

A solução é usar

hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address

Em vez de

hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net

A sintaxe de aparência incomum <;ocorre no caso de o nome do host ser resolvido para um endereço IPv6 (já que, pelo que parece, os dois pontos em um endereço IPv6 podem quebrar as coisas de outra forma). A variável $host_address é usada para resolver o caso em que o endereço IP que o nome do host resolve muda (como neste caso com smtp.sendgrid.net resolvendo para vários IPs e às vezes um diferente sendo resolvido no meio do processo) - I acho que evita que precise ser consultado novamente (veja tambémO transporte smtp). CréditoConfigurando o Exim para usar o Gmail como Smarthoste também o OP e @wurtel.

RESPOSTA ANTERIOR / COMO TESTAR E REPRODUZIR::

Acredito que o comentário de @wurtel sobre a questão sobre a mudança do endereço IP está correto porque posso reproduzir isso de forma confiável usando um script para alterar rapidamente qual IP smtp.sendgrid.net resolve. Também confirmei que, sem nenhuma entrada no arquivo hosts, esse problema acontece pelo menos a cada 2 horas quando envio um e-mail a cada 5 segundos, mas quando codifiquei um IP em /etc/hosts, passei 8 horas sem erros nessa frequência de envio, então essa é a solução temporária que estou usando por enquanto.

Veja como reproduzi esse problema. NOTA: isso é atual no final de outubro de 2015 - se você tentar depois disso, os IPs podem ser diferentes, então execute dig smtp.sendgrid.nete use dois IPs que ele retornará.

Adicione isto ao /etc/hosts

108.168.190.108 smtp.sendgrid.net

Salve isso em um arquivo PHP, substituindo[e-mail protegido]com um endereço de e-mail que você controla.

#!/usr/local/bin/php
<?php
while (true) {
    mail('[email protected]', 'Test email deletethiswithafilter', 'test ' . time());
    usleep(500000);
}

Salve isso em um arquivo PHP e execute-o enquanto o acima também estiver em execução. A cada 5 ms - 15 ms, ele alternará a entrada no arquivo hosts para smtp.sendgrid.net entre os dois IPs que ele resolve, que são 158.85.10.138 e 108.168.190.108

#!/usr/local/bin/php
<?php
while (true) {
    passthru('new_hosts_file_contents=`cat /etc/hosts | sed \'s/108.168.190.108/ip108/g\' | sed \'s/158.85.10.138/ip158/g\' | sed \'s/ip108/158.85.10.138/g\' | sed \'s/ip158/108.168.190.108/g\'`; echo "$new_hosts_file_contents" > /etc/hosts 2>&1');
    usleep(10000 + rand(-5000,5000));
}

informação relacionada