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]
