Wie zum senden von E-Mails mit mehreren, dynamische smtp mit Actionmailer/Ruby on Rails
Sah ich diesen Beitrag, aber mir ist es etwas anders:
Schienen ActionMailer mit mehreren SMTP-Servern
Ich bin ermöglicht den Benutzern das senden von Mails über Ihren eigenen SMTP-Anmeldeinformationen, so dass es eigentlich nicht von Ihnen kommen.
Aber Sie werden gesendet aus der Rails-app, das bedeutet, dass für jeden Benutzer, die ich brauche, um zu senden Ihre E-Mails über Ihren eigenen SMTP-server.
Wie kann ich das tun?
- Bitte helfen PR verschmolzen Schienen. (github.com/rails/rails/pull/7397) Dieser macht genau das, was Sie denken leicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur die ActionMailer::Base configuration-Werte vor jeder sende-Aktion.
Tun, was beschrieben ist in der anderen Antwort nicht sicher; Sie setzen Klasse Variablen, die hier nicht instanzierten Variablen. Wenn Ihre Rails-container ist die Verzweigung, die Sie dies tun können, aber jetzt ist Ihre Anwendung ist je nach detail des Containers. Wenn Sie nicht auf der Gabelung einer neuen Ruby-Prozess haben, können Sie eine race-Bedingung hier.
Sollten Sie ein Modell ist, dass die Ausweitung ActionMailer::Base, und wenn Sie eine Methode aufrufen, wird es wieder ein Mail::Message-Objekt. Das ist die Instanz-Objekt und ist, wo Sie sollten Ihre Einstellungen ändern. Die Einstellungen sind auch nur einen hash, so können Sie inline-es.
Wo in der oben mail_settings gibt einige hash mit den entsprechenden Tasten IE
MyMailer
Klasse? Etwa so:self.message.delivery_method.settings.merge!(delivery_options)
am Ende derMyMailer#some_message
?Hier ist eine Lösung, die mir kam, basierend auf den bisherigen Antworten und Kommentare. Dies nutzt ein ActionMailer interceptor-Klasse.
Für Rails 3.2.x
Können Sie AbstractController::Rückrufe in Ihrem mailer-Klasse und die machen einen "after_filter :set_delivery_options" in der mailer.
Den set_delivery_options Methode hätte Zugriff auf Instanz-Variablen-setup, indem Sie in Ihrem Mailprogramm Aktion und Sie können den Zugriff auf die E-mail-Objekt als "Nachricht".
falls jemand braucht-delivery-Methode dynamisch zusammen mit smtp-Anmeldeinformationen, kann u verwenden E-Mail::Message-Instanz-Methode zu setzen-delivery-Methode zusammen mit den Variablen also meine passte Aditya Sanghi version:
Da Schienen 4+ es funktioniert geben Sie die Zugangsdaten direkt über die delivery_method_options parameter:
Sehen Versenden von E-Mails mit Dynamic Delivery-Optionen (Rails Guides)