首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -如何在不触发Net::SMTPFatalError的情况下使用完整的电子邮件地址?

Rails -如何在不触发Net::SMTPFatalError的情况下使用完整的电子邮件地址?
EN

Stack Overflow用户
提问于 2010-02-21 12:08:06
回答 3查看 1.6K关注 0票数 5

我是rails新手,使用的是rails-2.3.5和ruby-1.8.7。这是我的notifier.rb模型:

代码语言:javascript
复制
# 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

当我调用这个方法时,我得到了以下错误:

代码语言:javascript
复制
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“。有人知道我做错了什么吗?

EN

回答 3

Stack Overflow用户

发布于 2010-03-23 04:44:25

从Travis提到的工单上看,似乎可以避免以下问题:

代码语言:javascript
复制
  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

票数 3
EN

Stack Overflow用户

发布于 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。花了几个月的时间才解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2011-04-01 15:48:10

问题出在rails 2.3.4和2.3.5中使用的ActionMailer::Base中的perform_delivery_smtp方法。你可以试着像这样修改它:

代码语言:javascript
复制
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

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2304725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档