/ / Warum erfasst fail_silently keine Ausnahme? Welche Ausnahmen erfasst es? - Django

Warum erfasst fail_silent keine Ausnahme? Welche Ausnahmen erfasst es? - Django

Irgendwie bekomme ich bei der Verwendung von django 1.7 mit dem Standard-E-Mail-Backend eine Fehlermeldung: 111 Verbindung abgelehnt. Dies wird als Ausnahme ausgelöst, auch wenn der Parameter fail_silently auf True gesetzt ist.

Die Linie geht so:

    return send_mail(subject=u"Bienvenido a Mi CNT!",
message=render_to_string("micnt/mail.welcome.txt", context),
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=[email_address],
fail_silently=True,
html_message=render_to_string("micnt/mail.welcome.html", context))

Ich weiß, wie ich die Ausnahme korrigieren kann (ich habe es vergessenbestimmte Parameter konfigurieren). Es kann jedoch Fälle geben, in denen die Ausnahme möglicherweise aus anderen Gründen vorliegt (z. B. habe ich die E-Mail-Parameter richtig angegeben, der Server ist jedoch ausgefallen).

Warum ist fail_silently funktioniert nicht? Was ist der "Umfang" von fail_silently? (d. h. welche Fehler deckt er ab und welche Fehler werden an den Aufrufer übergeben?).

Ich möchte die Ausnahmen korrekt abdecken, ohne:

try:
return send_mail(...)
except Exception as e:
# I want to understand what exception types will be triggered here.
pass

Antworten:

1 für die Antwort № 1

fail_silently werde nur fangen SMTPException"s wann send_mail versucht, eine Verbindung zum E-Mail-Server herzustellen (wird ausgeführt get_connection).

Ich nehme gerne solche Themen als Gelegenheit, den Django-Quellcode zu untersuchen, der alle Antworten enthält:

https://github.com/django/django/blob/master/django/core/mail/backends/smtp.py#L69