SMTP Net::ReadTimeout ohne Bezug zu Netzwerk- oder Login-Problemen - SMTP-Host ist einfach langsam

Hallo,

seit einigen Wochen schlagen E-Mails von meiner Discourse-Instanz fehl. Die SMTP-Einstellungen sind unverändert, der curl-Test funktioniert immer noch, ist aber merklich langsam. Der SMTP-Server unseres Hosters (den wir zum Versenden von E-Mails benötigen) hat eine konsistente Sendezeit von 7 Sekunden.

cat testmail | curl -vvv --url 'smtp://smtp.<HOST>:587' --mail-from mail@<DOMAIN> --mail-rcpt <ME> --user "mail@<DOMAIN>:<PW>" -T -

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying <IP>...
* Connected to smtp.<HOST> (<IP>) port 587 (#0)
< 220 mailproxy1.<HOST> Dovecot ready.
> EHLO ecm2
< 250-mailproxy1.<HOST>
< 250-8BITMIME
< 250-AUTH PLAIN LOGIN
< 250-BURL imap
< 250-ENHANCEDSTATUSCODES
< 250-SIZE
< 250-STARTTLS
< 250 PIPELINING
> AUTH PLAIN
< 334 
> xxxxxx=
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0< 235 2.7.0 Authentication successful
  0     0    0     0    0     0      0      0 --:--:--  0:00:07 --:--:--     0> MAIL FROM:<mail@<DOMAIN>>
< 250 2.1.0 Ok
> RCPT TO:<ME>
< 250 2.1.5 Ok
> DATA
< 354 End data with <CR><LF>.<CR><LF>
} [89 bytes data]
100    89    0     0    0    89      0     11 --:--:--  0:00:07 --:--:--    20< 250 2.0.0 Ok: queued as 356C3288C85
100    89    0     0    0    89      0     11 --:--:--  0:00:07 --:--:--    26
* Connection #0 to host smtp.<HOST> left intact

Ich habe dies mit unserem internen Mailserver verglichen, bei dem weniger als 1 Sekunde pro E-Mail benötigt wird. Die 7 Sekunden vom Mail-Hoster wären kein wirkliches Problem, aber ich konnte keine Einstellung finden, um das (scheinbar hartcodierte?) 5-Sekunden-Timeout zu erhöhen. Der open_timeout und, wie es mir scheint, relevantere read_timeout ist auch in der Testoberfläche unter /admin/email sichtbar:

  • Die Zeitmessungen im Docker-App-Container sind identisch mit einem lokalen Test oder einem Test auf dem Docker-Host.
  • cURL-gesendete E-Mails werden korrekt zugestellt (nach der 7-Sekunden-Wartezeit + einem Wimpernschlag).
  • Aus Datenschutzgründen sind die üblichen Workarounds wie SendGrid, Mailgun usw. leider keine Option.
  • Vielleicht hat ein Wechsel zu ActionMailer 7.0.x dieses Problem bei mir ausgelöst?

Vielen Dank für jeden Hinweis, wie read_timeout konfiguriert werden kann.

1 „Gefällt mir“

Dafür ist es notwendig, diese neuen Einstellungen hinzuzufügen unter

Also sieht es so aus

  if GlobalSetting.smtp_address
    settings = {
      address: GlobalSetting.smtp_address,
      port: GlobalSetting.smtp_port,
      domain: GlobalSetting.smtp_domain,
      user_name: GlobalSetting.smtp_user_name,
      password: GlobalSetting.smtp_password,
      authentication: GlobalSetting.smtp_authentication,
      enable_starttls_auto: GlobalSetting.smtp_enable_start_tls,
+     open_timeout: GlobalSetting.smtp_open_timeout,
+     read_timeout: GlobalSetting.smtp_read_timeout
    }

Können Sie einen Pull-Request mit den Änderungen erstellen?

2 „Gefällt mir“

Hallo @Falco,

vielen Dank für deine schnelle Antwort. Du hast Recht, diese Änderungen sind wirksam:

  • Die neuen Timeouts aus app.yml sind sichtbar
  • E-Mails können gesendet werden.

Da mein Ruby praktisch nicht vorhanden ist, werde ich mein Bestes tun, um den Pull Request vorzubereiten und bin dir und Discourse im Allgemeinen bereits sehr dankbar für deine Hilfe.

Mit freundlichen Grüßen

Roland

2 „Gefällt mir“

Der PR ist online: Allow configuration of smtp timeout settings by rolandkoller · Pull Request #17863 · discourse/discourse · GitHub

Ich wäre dankbar für jeden Input, wie/ob ich den PR verbessern kann.

4 „Gefällt mir“

Wir benötigen nur noch eine CLA-Signatur im PR, damit wir ihn zusammenführen können.

2 „Gefällt mir“

Entschuldigung, hatte ein langes Wochenende. Erledigt.

FWIW Sie tun dies absichtlich, um Spammer abzuschrecken. Die meisten automatisierten Spam-Tools haben auch ein Timeout von 5 Sekunden.

1 „Gefällt mir“

Ich erwarte genau das, da die Verzögerung auf der SMTP-Serverseite zu homogen ist. Daher könnte die von @Falco vorgeschlagene Korrektur, die sich nun in PR#17863 befindet, für mehr Benutzer relevant sein.

Es gibt einen Fehler im Unit-Test core frontend (Headless Firefox). Ich habe keine Ahnung, was vor sich geht, aber ich würde nicht erwarten, dass dies durch unsere hier vorgenommene Änderung ausgelöst wird.

1 „Gefällt mir“

Danke für den PR und das Testen. Es ist jetzt gemerged.

1 „Gefällt mir“

Dieses Thema wurde nach 4 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.