1

我正在尝试在我的 Rails 应用程序上设置 SendGrid,我一直在关注这个:http ://sendgrid.com/docs/Integrate/Frameworks/rubyonrails.html

到目前为止,我已经设置了我的config/environment.rb

ActionMailer::Base.smtp_settings = {
  :user_name => *********, 
  :password => *********, 
  :domain => *********, 
  :address => "smtp.sendgrid.net",
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
}

制作了一个名为的新文件app/models/notifier.rb,其中包含

class Notifier < ActionMailer::Base
  include SendGrid
  default :from => "*****@******.com"

  # send a signup email to the user, pass in the user object that contains the user's email address
  def signup_email(user)
    mail( :to => user.email, :subject => "Thanks for signing up" )
  end
end

在 rails 控制台中,会发生这种情况。

>> @new_user = User.new(:email => 'blah@blah.com')
 => #<User id: nil, email: "blah@blah.com", created_at: nil, updated_at: nil> 
>> @new_user.save
   (0.2ms)  BEGIN
  SQL (1.0ms)  INSERT INTO "users" ("created_at", "email", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["created_at", Tue, 23 Apr 2013 01:21:17 UTC +00:00], ["email", "blah@blah.com"], ["updated_at", Tue, 23 Apr 2013 01:21:17 UTC +00:00]]
   (1.8ms)  COMMIT
 => true 
>> Notifier.signup_email @new_user
ActionView::MissingTemplate: Missing template notifier/signup_email with "mailer". Searched in:
* "notifier"

我究竟做错了什么?我不明白为什么我需要一个模板。我是 Rails 的新手,所以如果这很明显,请原谅我。

4

2 回答 2

2

问题是ActionMailer在 Rails 中默认使用模板。您应该查看rails 的邮件指南,它的详细信息比我在这里要描述的要多。

要解决此问题,您应该创建一个app/views/notifier/signup_email.html.erb包含一些内容的模板。


顺便说一句,如果您想在不使用模板的情况下发送电子邮件,则需要deliver在创建邮件程序后立即调用该函数。有关详细信息,请参阅此堆栈溢出问题:

如何在没有模板的情况下使用 rails 发送邮件?

于 2013-04-23T01:49:15.627 回答
0

def signup_email(user) mail(:to => user.email, :subject => "感谢注册") end

替换为

def signup_email(user) mail( :to => user.email, :subject => "感谢注册", :body => "hello" ) end

于 2015-05-14T13:36:59.517 回答