Comment envoyer des e-mails avec plusieurs, dynamique smtp à l'aide Actionmailer/Ruby on Rails
J'ai vu ce post, mais le mien est un peu différent:
Rails ActionMailer avec de multiples serveurs SMTP
Je suis en permettant aux utilisateurs d'envoyer un mail à l'aide de leurs propres informations d'identification SMTP si elle a effectivement fait venir d'eux.
Mais ils seront envoyés à partir de l'application Rails, ce qui signifie que pour chaque utilisateur, j'ai besoin d'envoyer leurs e-mails à l'aide de leur propre serveur SMTP.
Comment puis-je le faire?
- S'il vous plaît aider obtenir ce PR fusionné dans les rails. (github.com/rails/rails/pull/7397) C'est exactement ce que vous pensez de facilement.
Vous devez vous connecter pour publier un commentaire.
Il suffit de régler le ActionMailer::la Base de valeurs de configuration avant chaque action d'envoi.
Faire ce qui est décrit dans l'autre réponse n'est pas sûr; vous définissez les variables de classe ici, pas de variables instanciées. Si vos Rails conteneur est à la bifurcation, vous pouvez le faire, mais maintenant, votre application est en fonction sur un détail de l'implémentation du conteneur. Si vous n'êtes pas un fork d'un nouveau process Ruby, alors vous pouvez avoir une condition de course ici.
Vous devriez avoir un modèle qui est en train d'étendre ActionMailer::Base, et lorsque vous appelez une méthode, il sera de retour un Courrier::objet du Message. C'est votre instance de l'objet et c'est là que vous devez modifier vos paramètres. Les paramètres sont également à seulement un hachage, de sorte que vous pouvez inclure.
Où dans le ci-dessus mail_settings certains retours de hachage avec les touches appropriées IE
MyMailer
classe? Comme:self.message.delivery_method.settings.merge!(delivery_options)
à la fin de laMyMailer#some_message
?Voici une solution que j'ai trouvé basé sur les réponses et commentaires. Il utilise une ActionMailer intercepteur de classe.
Pour Les Rails 3.2.x
Vous pouvez inclure AbstractController::Rappels dans votre classe mailer et faire une "after_filter :set_delivery_options" à l'intérieur de l'enveloppe.
La set_delivery_options méthode aurait accès aux variables d'instance de l'installation par vous-même dans votre logiciel de courrier d'action et vous pouvez accéder à la messagerie de l'objet comme "message".
dans le cas où quelqu'un a besoin de définir la méthode de livraison de façon dynamique avec smtp informations d'identification, u peut utiliser Courrier::Message de la méthode d'instance pour définir la méthode de livraison, de concert avec les variables mon addapted Aditya Sanghi version:
Depuis Rails 4+, il s'efforce de donner les informations d'identification directement via le delivery_method_options paramètre:
Voir L'envoi d'e-Mails avec des Dynamiques Options de Livraison (Rails Guides)