Wir senden E-Mails mit Exim (konfiguriert über WHM). Mit genau derselben Konfiguration sendet Exim anscheinend meistens den richtigen AUTH LOGIN-Benutzernamen und das richtige Passwort. Manchmal lässt es diesen Teil jedoch aus und Sendgrid lehnt mit dem folgenden Fehler ab:
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
Wenn ich mich näher damit befasse, kann ich das Problem (nicht immer, aber manchmal) mit Folgendem reproduzieren:
# exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim
This is an exim test.
Dies sind die Exim-Konfigurationseinstellungen:
Abschnitt: AUTH
sendgrid_login:
driver = plaintext
public_name = LOGIN
client_send = : ******** : **************
Abschnitt: 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
Abschnitt: TRANSPORTSTART
sendgrid_smtp:
driver = smtp
hosts = smtp.sendgrid.net
hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net
authenticated_sender_force = true
Wenn es funktioniert, sieht das Protokoll wie folgt aus:
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
Achten Sie besonders auf die Linie SMTP>> AUTH LOGIN
und die Sechs direkt darunter, die in der 235 Authentication successful.
Linie endet.
Hier ist ein Fehler:
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
Beachten Sie, dass SMTP>> AUTH LOGIN
die folgenden sechs Zeilen nicht aufgerufen werden...?
Die Frage ist, warum exim den eigentlichen SMTP>> AUTH LOGIN
Teil der Anfrage auslässt, aber nur manchmal? Es verwendet diegenau das gleicheVerbindungskonfiguration (Sie können sie in beiden Protokollen als referenziert sehen R=send_via_sendgrid T=sendgrid_smtp
).
Antwort1
BEARBEITEN, 8. November 2015:
Die Lösung besteht in der Verwendung
hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address
Anstatt
hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net
Die ungewöhnlich aussehende <;
Syntax gilt für den Fall, dass der Hostname in eine IPv6-Adresse aufgelöst wird (da es so klingt, als könnten die Doppelpunkte in einer IPv6-Adresse sonst zu Problemen führen). Die Variable $host_address wird verwendet, um den Fall zu lösen, dass sich die IP-Adresse ändert, in die der Hostname aufgelöst wird (wie in diesem Fall, wenn smtp.sendgrid.net in mehrere IPs aufgelöst wird und manchmal mitten im Prozess in eine andere aufgelöst wird) - ich denke, es verhindert, dass es erneut nachgeschlagen werden muss (siehe auchDer SMTP-Transport). KreditKonfigurieren von Exim zur Verwendung von Gmail als Smarthostund auch der OP und @wurtel.
VORHERIGE ANTWORT / SO TESTEN UND REPRODUZIEREN SIE::
Ich glaube, dass @wurtels Kommentar zur Frage zur Änderung der IP-Adresse richtig ist, da ich dies zuverlässig reproduzieren kann, indem ich ein Skript verwende, um schnell zu ändern, welche IP smtp.sendgrid.net auflöst. Ich habe auch bestätigt, dass dieses Problem ohne Eintrag in der Hosts-Datei mindestens alle 2 Stunden auftritt, wenn ich alle 5 Sekunden eine E-Mail sende, aber als ich eine IP in /etc/hosts fest codiert habe, lief es bei dieser Sendehäufigkeit 8 Stunden lang ohne Fehler, also ist das die vorübergehende Problemumgehung, die ich derzeit verwende.
So habe ich dieses Problem reproduziert. HINWEIS: Dies ist der aktuelle Stand von Ende Oktober 2015. Wenn Sie es danach versuchen, können die IPs anders sein. Führen Sie es also aus dig smtp.sendgrid.net
und verwenden Sie zwei IPs, die stattdessen zurückgegeben werden.
Fügen Sie dies zu /etc/hosts hinzu
108.168.190.108 smtp.sendgrid.net
Speichern Sie dies in einer PHP-Datei und ersetzen Sie[email geschützt]mit einer E-Mail-Adresse, die Sie kontrollieren.
#!/usr/local/bin/php
<?php
while (true) {
mail('[email protected]', 'Test email deletethiswithafilter', 'test ' . time());
usleep(500000);
}
Speichern Sie dies in einer PHP-Datei und führen Sie es aus, während das obige ebenfalls ausgeführt wird. Alle 5 ms - 15 ms wird der Eintrag in der Hosts-Datei für smtp.sendgrid.net zwischen den beiden IPs umgeschaltet, die es auflöst, nämlich 158.85.10.138 und 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));
}