2011-10-02 68 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

相关问题