Projet

Général

Profil

Development #41789

Crash validation email

Ajouté par Emmanuel Cazenave il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
16 avril 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Authentic 2 - Bug #41791: validators : socket non fermée lors de la validation smtp des adresses de courrielFermé16 avril 2020

Actions

Révisions associées

Révision 2a4a2305 (diff)
Ajouté par Benjamin Dauvergne il y a environ 4 ans

emails: handle errors during RCPT test (#41789)

Historique

#2

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 ?

#3

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.

#4

Mis à jour par Emmanuel Cazenave il y a environ 4 ans

Aucune idée, c'est Paul le souffleur.

#5

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é
#6

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Assigné à mis à Benjamin Dauvergne
#7

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

#8

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.

#9

Mis à jour par Paul Marillonnet il y a environ 4 ans

  • C'est pas smtp.close() mais smtp.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, genre ConnectionRefusedError.
#10

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Paul Marillonnet a écrit :

  • C'est pas smtp.close() mais smtp.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, genre ConnectionRefusedError.

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'

#11

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.

#12

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Branche à jour avec le .quit().

#13

Mis à jour par Paul Marillonnet il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée
#14

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)
#15

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

Formats disponibles : Atom PDF