我是rails新手,使用的是rails-2.3.5和ruby-1.8.7。这是我的notifier.rb模型:
# app/models/notifier.rb
class Notifier < ActionMailer::Base
default_url_options[:host] = "foo.com"
#This method sends an email with token to users who request a new password
def password_reset_instructions(user)
subject "Password Reset Instructions"
from "Support Team<support@foo.com>"
recipients user.email
sent_on Time.now
body :edit_password_reset_url =>
edit_password_reset_url(user.perishable_token)
end
end当我调用这个方法时,我得到了以下错误:
Net::SMTPFatalError in Password resetsController#create
555 5.5.2 Syntax error. 36sm970138yxh.13我找到一篇文章,说这个问题是ruby-1.8.4中的一个bug,修复方法是从:from字段中删除尖括号。果然,如果我只使用"support@foo.com“而不是"Support Teamsupport@foo.com”,一切都会正常工作。
然而,在rails -2.3.5API或ActionMailer基础rails指南中都没有提到这个问题,事实上,这两个指南在它们的操作邮件设置示例中都显示了"name“。有人知道我做错了什么吗?
发布于 2010-03-23 04:44:25
从Travis提到的工单上看,似乎可以避免以下问题:
def password_reset_instructions(user)
subject "Password Reset Instructions"
from "Support Team<support@foo.com>"
+ headers "return-path" => 'support@foo.com'
recipients user.email
sent_on Time.now
body :edit_password_reset_url =>
edit_password_reset_url(user.perishable_token)
end 否则,您可以抓取工单中记录的某个补丁,或者等待2.3.6或3.x
发布于 2010-02-23 07:32:07
Rails/ActionMailer打破了这一点:
https://rails.lighthouseapp.com/projects/8994/tickets/2340
由于像这样的关键bug不能在Rails项目中获得高优先级或临时版本来修复它们,所以您要么自己修补它,要么等待很长时间才能修复它。就像Rails 2.3.4中出现的一个非常糟糕的bug,它使得Rails完全无法用于Ruby1.9:https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234。花了几个月的时间才解决这个问题。
发布于 2011-04-01 15:48:10
问题出在rails 2.3.4和2.3.5中使用的ActionMailer::Base中的perform_delivery_smtp方法。你可以试着像这样修改它:
class ApplicationMailer < ActionMailer::Base
def welcome_email(user)
recipients user.email from "Site Notifications<notifications@example.com>"
subject "Welcome!"
sent_on Time.now
...
end
def perform_delivery_smtp(mail)
destinations = mail.destinations
mail.ready_to_send
sender = mail['return-path'] || mail.from
smtp = Net::SMTP.new(smtp_settings[:address], smtp_settings[:port])
smtp.enable_starttls_auto if smtp_settings[:enable_starttls_auto] && smtp.respond_to?(:enable_starttls_auto)
smtp.start(smtp_settings[:domain], smtp_settings[:user_name], smtp_settings[:password],
smtp_settings[:authentication]) do |smtp|
smtp.sendmail(mail.encoded, sender, destinations)
end
end
endhttps://stackoverflow.com/questions/2304725
复制相似问题