首页 文章

Actionmailer无法识别rails 3 app

提问于
浏览
1

我试图在Rails 3.0.1应用程序上使用actionmailer发送邮件 . 这是我的设置

配置/初始化/为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 => "info@saidyes.co.uk"

  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

应用程序/模型/ 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

我得到的第一个错误是我的Users模型类中未初始化的常量UserMailer . 我通过在User模型定义的顶部添加require来修复它 . 现在我明白了

未定义的局部变量或UserMailer的方法`attachments':Class

我必须错误地配置了actionmailer,或者我的rails应用程序未正确配置才能使用邮件程序 .

无论如何,任何建议或帮助将不胜感激 .

干杯

1 回答

  • 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
    

    类方法可以实例化一个实例,并确保呈现正确的模板 .

相关问题