Pour ma part, je mets toujours l'envoi de mail dans un observer, jamais
dans le modèle lui-même.

Si tu te fous des erreurs et que tu ne cherches pas la performance (envoi
de mails massif), tu peux simplement mettre l'envoi de mail dans un thread.
Tu peux aussi/en plus rescue l'exception et gérer le problème (gestion
d'une liste des fails pour retenter les envois plus tard avec notif pour
l'admin?)

Cdlt =).

Le 9 mai 2012 17:09, Jean-Philippe M. <[email protected]> a écrit
:

> Bonjour,
>
> sur plusieurs de nos applications nous utilisons state_machine avec
> des hooks before/after_transition pour envoyer des emails (par
> exemple, un envoi de mail de confirmation à un nouvel utilisateur, ou
> une confirmation de commande).
> Malheureusement l'envoi de mail échoue parfois : adresse mail fausse
> ou qui contient une typo, erreur SMTP sur le serveur mail, problème
> réseau... ce qui entraîne l'envoi d'un mail d'exception_notifier (qui
> peut d'ailleurs potentiellement échouer lui aussi) et l'affichage
> d'une erreur 500 au visiteur.
>
> Dans la plupart des cas l'envoi de ce mail dans l'immédiat n'est pas
> primordiale, on doit donc pouvoir ignorer cette erreur et retenter un
> envoi ultérieurement, le visiteur n'ayant pas a être au courant de ce
> genre de problèmes.
> J'envisage 2 pistes pour éviter ce genre d'erreurs :
> - passer l'envoi de tous les mails en background (avec resque ou
> delayed_job par exemple), ce qui serait le plus "propre", et gérer les
> erreurs dans ce contexte (logging, renvoi)
> - reprendre tous les cas ou on envoie un mail et catcher manuellement
> les erreurs possibles pour les logger ou prévenir l'admin. On aurait
> ainsi pas besoin de mettre en place un système de tâches de fond s'il
> n'y en a pas déjà mais ça peut demander du temps de dev important
> selon la taille du projet et complexifier le code des modèles
>
> Comment procédez vous sur vos projets ? Il me semble que la solution
> resque_mailer ou delayed_job est la plus populaire mais il y a peut
> être d'autres pistes que je n'ai pas encore exploré.
>
> --
> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
> Google Groups.
> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
> [email protected]
> Pour résilier votre abonnement envoyez un e-mail à l'adresse
> [email protected]
>

-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]

Répondre à