Estamos enviando correo usando exim (configurado a través de WHM). Con exactamente la misma configuración, aparentemente la mayoría de las veces exim envía el nombre de usuario y la contraseña de AUTH LOGIN correctos, sin embargo, a veces omite esta parte y sendgrid se niega con el siguiente error:
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
Profundizando en ello, puedo reproducir el problema (no siempre, a veces) con lo siguiente:
# exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim
This is an exim test.
Estos son los ajustes de configuración de exim:
Sección: AUTH
sendgrid_login:
driver = plaintext
public_name = LOGIN
client_send = : ******** : **************
Sección: INICIO DEL ROUTER
send_via_sendgrid:
driver = manualroute
domains = ! +local_domains
transport = sendgrid_smtp
route_list = "* smtp.sendgrid.net::587 byname"
host_find_failed = defer
no_more
Sección: TRANSPORTEINICIO
sendgrid_smtp:
driver = smtp
hosts = smtp.sendgrid.net
hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net
authenticated_sender_force = true
Cuando funciona, este es el registro:
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
Presta especial atención a la línea SMTP>> AUTH LOGIN
y a los seis que están justo debajo, que terminan en la 235 Authentication successful.
línea.
Aquí hay un fracaso:
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
Tenga en cuenta que SMTP>> AUTH LOGIN
las siguientes seis líneas no se llaman...
La pregunta es, ¿por qué exim omite la SMTP>> AUTH LOGIN
parte real de la solicitud, pero sólo a veces? Está usando elexactamente lo mismoconfiguración de conexión (puede verla referenciada en ambos registros como R=send_via_sendgrid T=sendgrid_smtp
).
Respuesta1
EDITAR 8 de noviembre de 2015:
La solución es utilizar
hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address
En lugar de
hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net
La sintaxis de aspecto inusual <;
es en caso de que el nombre de host se resuelva en una dirección IPv6 (ya que, por lo que parece, los dos puntos en una dirección IPv6 pueden romper las cosas de otra manera). La variable $host_address se usa para resolver el caso en el que la dirección IP que el nombre de host resuelve cambia (como en este caso con smtp.sendgrid.net resolviendo múltiples IP y, a veces, una diferente resolviendo a mitad del proceso) - I Creo que evita que sea necesario volver a buscarlo (ver tambiénEl transporte SMTP). CréditoConfigurar Exim para usar Gmail como Smarthosty también el OP y @wurtel.
RESPUESTA ANTERIOR/CÓMO PROBAR Y REPRODUCIR::
Creo que el comentario de @wurtel sobre la pregunta sobre el cambio de dirección IP es correcto porque puedo reproducirlo de manera confiable usando un script para cambiar rápidamente qué IP resuelve smtp.sendgrid.net. También confirmé que sin ninguna entrada en el archivo de hosts, este problema ocurre al menos cada 2 horas cuando envío un correo electrónico cada 5 segundos, pero cuando codifiqué una IP en /etc/hosts, estuve durante 8 horas. sin ningún error en esa frecuencia de envío, así que esa es la solución temporal que estoy usando por ahora.
Así es como reproduje este problema. NOTA: esto está actualizado a finales de octubre de 2015; si lo intenta después de eso, las IP pueden ser diferentes, así que ejecútelo dig smtp.sendgrid.net
y use dos IP que devuelva.
Agregue esto a /etc/hosts
108.168.190.108 smtp.sendgrid.net
Guarde esto en un archivo PHP, reemplazando[correo electrónico protegido]con una dirección de correo electrónico que usted controle.
#!/usr/local/bin/php
<?php
while (true) {
mail('[email protected]', 'Test email deletethiswithafilter', 'test ' . time());
usleep(500000);
}
Guarde esto en un archivo PHP y ejecútelo mientras se ejecuta lo anterior también. Cada 5 ms - 15 ms alternará la entrada en el archivo de hosts para smtp.sendgrid.net entre las dos IP que resuelve, que son 158.85.10.138 y 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));
}