5

私はレールが初めてで、レール-2.3.5 とルビー-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 のバグであり、修正は :from フィールドから山括弧を削除することであるという記事を見つけました。案の定、「Support Team<support@foo.com>」の代わりに「support@foo.com」を使用すると、すべて正常に動作します。

ただし、rails-2.3.5 API または ActionMailer Basics rails ガイドのいずれにもこの問題への言及はなく、実際、どちらも actionmailer のセットアップ例に「name<mail address>」と表示されています。私が間違っていることを知っている人はいますか?

4

3 に答える 3

3

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-03-22T20:44:24.873 に答える
0

問題は、レール 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

end
于 2011-04-01T07:48:09.507 に答える
0

Rails/ActionMailer はこれを壊しました:

https://rails.lighthouseapp.com/projects/8994/tickets/2340

このような重大なバグは、Rails プロジェクトで修正するための優先度の高いものや中間リリースを取得しないため、自分でパッチを当てるか、修正されるまで長い時間を待たなければなりません。Rails 2.3.4 で発生し、Ruby 1.9 で Rails を完全に使用できなくした、非常に悪いバグのように: https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror -234 . その修正を得るのに数ヶ月かかりました。

于 2010-02-22T23:32:07.340 に答える