2 Stimmen

Rails Mailer: Datei ändern, wenn delivery_method :file

Ich möchte die Datei benannt haben mit Timestamp + normal_mail_name + ".eml"..

Ich habe in den Rails-Quellcode, den Mail-Gem-Quellcode und den Letter Opener-Gem geschaut.. Könntest du mir einen Hinweis geben, wie ich den Rails Mailer (monkey-patch) einfügen kann, um folgendes anzugeben:

config.action_mailer.file_settings = { :location => Rails.root.join('tmp', 'mail'), :file_name => Time.now.to_i.to_s + "mail.eml" }

Danke!

UPDATE: Es wäre auch schön, diese E-Mails automatisch mit meinem lokalen zugeordneten E-Mail-Programm mit Launchy zu öffnen, wie beim Letter Opener Gem.. ich würde es selbst machen, aber ich verstehe die Quellcodes nicht..

2voto

Matthias Punkte 4315

Ich denke, du hast eine Menge Mailer-Sachen und willst den Mail-Body, Texte etc. debuggen? Liege ich richtig? Wenn ja, würde ich die E-Mails nicht mit delivery_method :file senden, sondern einfach ein echtes E-Mail-Konto (zum Beispiel bei Gmail) erstellen und die Mails über ein Testkonto senden.

Zum Beispiel in deiner config/environments/development.rb:

email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/mail.yml"))[Rails.env] rescue nil

if email_settings.nil?
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.perform_deliveries = false
  config.action_mailer.delivery_method = :file
else
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "#{email_settings["address"]}",
    :port                 => email_settings["port"],
    :authentication       => "#{email_settings["authentication"]}",
    :user_name            => "#{email_settings["user_name"]}",
    :password             => "#{email_settings["password"]}",
    :enable_starttls_auto => email_settings["enable_starttls_auto"]
  }
end

Und deine mail.yml Datei:

development:
  address: smtp.gmail.com
  port: 587
  authentication: login
  user_name: test@your-domain.com
  password: yourpassword
  enable_starttls_auto: true

Dies ist keine direkte Antwort auf deine Frage, aber vielleicht ist dieser Workaround eine gute Lösung für dich. Du könntest auch deine anderen Umgebungen entsprechend konfigurieren, abhängig von deinen Bedürfnissen.

1voto

edk750 Punkte 1106

Wenn Sie einfach den Versand der E-Mails über einen echten Mailserver überspringen möchten, um Ihre E-Mails lokal anzuzeigen, gibt es zwei gute Lösungen, die ich verwendet habe:

Eine kostenpflichtige, OSX-spezifische Lösung besteht darin, http://mocksmtpapp.com/ zu verwenden

Wenn Sie eine Kopie der Roh-E-Mail (einschließlich Header) haben möchten, würde ich eine E-Mail-Interceptor schreiben und den Inhalt des E-Mail-Objekts auf die Festplatte schreiben.

http://railscasts.com/episodes/206-action-mailer-in-rails-3

Etwas Ähnliches wie dies für lib/development_mail_interceptor:

class DevelopmentMailInterceptor
  def self.delivering_email(message)
    message.perform_deliveries = false
    File.open("#{Time.now.to_i}-email.eml", "w") { |f| f.write(message.to_s) }
  end
end

und in config/initializers/setup_mail.rb

Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X