Development #41789
Crash validation email
0%
Description
avril 16 16:30:49 dcpublik uwsgi[8824]: hobo ERROR hobo.demarches.venissieux.fr 78.193.105.43 a5d96889c24e44718c0f87f51dc232 r:7FF948022DD0 Internal Server Error: /emails/ Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 249, in _legacy_get_response response = self._get_response(request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view return view_func(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 68, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 88, in dispatch return handler(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/hobo/environment/forms.py", line 200, in post if not form.is_valid(): File "/usr/lib/python2.7/dist-packages/django/forms/forms.py", line 183, in is_valid return self.is_bound and not self.errors File "/usr/lib/python2.7/dist-packages/django/forms/forms.py", line 175, in errors self.full_clean() File "/usr/lib/python2.7/dist-packages/django/forms/forms.py", line 384, in full_clean self._clean_fields() File "/usr/lib/python2.7/dist-packages/django/forms/forms.py", line 402, in _clean_fields value = field.clean(value) File "/usr/lib/python2.7/dist-packages/django/forms/fields.py", line 161, in clean self.validate(value) File "/usr/lib/python2.7/dist-packages/hobo/emails/forms.py", line 26, in validate validate_email_address(value) File "/usr/lib/python2.7/dist-packages/hobo/emails/validators.py", line 44, in validate_email_address smtp.quit() File "/usr/lib/python2.7/smtplib.py", line 772, in quit res = self.docmd("quit") File "/usr/lib/python2.7/smtplib.py", line 394, in docmd return self.getreply() File "/usr/lib/python2.7/smtplib.py", line 368, in getreply raise SMTPServerDisconnected("Connection unexpectedly closed") SMTPServerDisconnected: Connection unexpectedly closed
Et on me souffle dans l'oreillette qu'il faut faire comme #40989
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 4 ans
faire comme #40989
c'est-à-dire ajouter
except smtplib.SMTPServerDisconnected:
ou c'est-à-dire davantage ?
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Oui ça et il peut aussi faire un with smtp:
qui fermera la socket (c'est manquant coté a2, je m'en rends compte). Mais comme ce n'est activé nul part c'est moins gênant.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Lié à Bug #41791: validators : socket non fermée lors de la validation smtp des adresses de courriel ajouté
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0001-emails-handle-errors-during-RCPT-test-41789.patch 0001-emails-handle-errors-during-RCPT-test-41789.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Pas de with
, en python2 SMTP n'est pas un gestionnaire de contexte et connect() inutile si host passé au constructeur, OSError, IOError et socket.error parce que on a un peu tout ça visiblement.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- C'est pas
smtp.close()
maissmtp.quit()
qu'il faut.
- Lorsque le statut de retour de HELO n'est pas 250, je verrais plutôt une sous-classe de
OSError
plus précise, genreConnectionRefusedError
.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Paul Marillonnet a écrit :
- C'est pas
smtp.close()
maissmtp.quit()
qu'il faut.
Non c'est bien close(), on peut avoir une exception dans quit() et close ne sera pas fait, tu peux regarder l'implémentation de exit() dans version python 3.8 de smtplib. Mais on peut rajouter .quit() en fin de block aussi.
- Lorsque le statut de retour de HELO n'est pas 250, je verrais plutôt une sous-classe de
OSError
plus précise, genreConnectionRefusedError
.
La classe de l'erreur n'est pas visible une fois interpollé dans le message de ValidationError()s, ça n'aura aucun effet.
>>> str(OSError('coucou')) 'coucou'
Mis à jour par Paul Marillonnet il y a environ 4 ans
Benjamin Dauvergne a écrit :
Non c'est bien close(), on peut avoir une exception dans quit() et close ne sera pas fait, tu peux regarder l'implémentation de exit() dans version python 3.8 de smtplib. Mais on peut rajouter .quit() en fin de block aussi.
Oui justement SMTP.close
n'envoie pas de QUIT (alors que SMTP.__exit__
essaie de le faire), c'est pas bien !
La classe de l'erreur n'est pas visible une fois interpollé dans le message de ValidationError()s, ça n'aura aucun effet.
Ok j'avais loupé ça.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 2a4a2305d091ef4cbda540798c9999095a3c2618 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu Apr 16 18:14:12 2020 +0200 emails: handle errors during RCPT test (#41789)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
emails: handle errors during RCPT test (#41789)