2012-04-30 6 views
8

I definiert, um eine kundenspezifische Lieferung Methode, und in einem Initialisierer laden:Warum nimmt Rails meine benutzerdefinierte Mail-Zustellungsmethode nicht auf?

ActionMailer::Base.add_delivery_method :custom, CustomDelivery 

I addiert dann config.action_mailer.delivery_method = :custom sowohl development.rb und production.rb.

Aber wenn ich möchte eine E-Mail

UserMailer.authorize(user).deliver 

Es mit SMTP etwas im Zusammenhang mit nicht senden (ArgumentError: A sender (Return-Path, Sender or From) required to send a message from /Users/me/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:99:in deliver!') - was ich tun nicht verwenden möchten.

Warum wird die benutzerdefinierte Zustellungsmethode nicht abgerufen?

UPDATE: Wenn ich von der Konsole versuchen, merke ich folgendes:

irb(main):019:0> UserMailer.delivery_method 
=> :custom 

irb(main):020:0> UserMailer.authorize(user).delivery_method 
=> #<Mail::SMTP:0x00000100bdc738 @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}> 

(Btw ich für "SMTP" in meinem Projekt gesucht und es gibt 0 Vorkommen)

+2

Irgendein Glück mit diesem? Ich möchte eine benutzerdefinierte delivery_method schreiben, um die SendGrid-API zu verwenden – Shane

Antwort

0

Sie konfiguriert haben SMTP über environment.rb? So sieht meine aus.

ActionMailer::Base.smtp_settings = { 
    :domain   => 'gmail.com', 
    :address   => 'smtp.gmail.com', 
    :port   => 587, 
    :tls    => true, 
    :authentication => :plain, 
    :charset   => 'utf-8', 
    :user_name  => ENV['GMAIL_USERNAME'], 
    :password  => ENV['GMAIL_PASSWORD'], 
    :enable_starttls_auto => true 
} 
1

konfiguriert action_mailer delivery_method mit Ihrer eigenen Auslieferungsklasse:

config.action_mailer.delivery_method = MyCustomDelivery 

Diese Klasse soll eine liefern implementieren! Instanzmethode, die eine Instanz des Mail gem. Etwas wie dieses:

class MyCustomDelivery 
    def deliver!(mail) 
    puts "MAIL FROM: #{mail.from}" 
    puts "RCPT TO: #{mail.to}" 
    puts "DATA: #{mail.to_s}" 
    end 
end 
Verwandte Themen