2011-10-02 56 views
1

我想在Rails 3.0.1應用程序上使用actionmailer發送郵件。這裏是我的設置Actionmailer無法識別rails 3應用程序

配置/初始化/爲setup_mail.rb

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "saidyes.co.uk", 
    :user_name   => "username", 
    :password    => "password", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

ActionMailer::Base.default_url_options[:host] = "localhost:3000" 
ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development? 

配置/環境/ development.rb

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 
config.action_mailer.perform_deliveries = true 

應用程序/郵寄/ user_mailer.rb

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def self.registration_confirmation(user) 
    @user = user 
    attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png") 
    mail(:to => "#{user.email}", :subject => "Welcome") 
    end 
end 

app/models/user.rb

require "#{Rails.root}/app/mailers/user_mailer" 

after_create :send_welcome_email 

private 
def send_welcome_email 
    UserMailer.registration_confirmation(self).deliver 
end 

我得到的第一個錯誤是我的用戶模型類中未初始化的常量UserMailer。我通過在用戶模型定義的頂部添加require來修復它。現在,我得到UserMailer

未定義的局部變量或方法'附件:類

我必須配置的ActionMailer不正確或我的Rails應用程序配置不正確使用郵件。

無論如何任何意見或幫助,將不勝感激。

乾杯

回答

2

我想你已經遇到簡單的問題是郵件的方法應該在你的郵件類的實例來定義。

即它應該是

class UserMailer < ActionMailer::Base 
    def registration_confirmation(user) 
    @user = user 
    attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png") 
    mail(:to => "#{user.email}", :subject => "Welcome") 
    end 
end 

注意沒有self

看看關於這個問題

正如您的例子很有幫助Rails Guide你還是會在調用的方法類

UserMailer.registration_confirmation(user).deliver 

類方法做一些魔法來實例化一個實例,並確保呈現正確的模板。

+0

doh!當我在用戶模型中得到未初始化的常量usermailer的早期錯誤時,我將自我引用放入。無論如何,感謝您花時間回答,這很有效! – Dermot

相關問題