views:

288

answers:

2

I am new to rails and using rails-2.3.5 and ruby-1.8.7. Here is my notifier.rb model:

# 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<[email protected]>"  
    recipients    user.email  
    sent_on       Time.now  
    body          :edit_password_reset_url => 
                   edit_password_reset_url(user.perishable_token)  
  end  
end

When I call this method I get the following error:

Net::SMTPFatalError in Password resetsController#create
555 5.5.2 Syntax error. 36sm970138yxh.13

I found an article that said the problem was a bug in ruby-1.8.4 and that the fix is to remove the angle brackets from the :from field. Sure enough, if I just use "[email protected]" instead of "Support Team<[email protected]>" everything works fine.

However, there is no reference to this issue in either the rails-2.3.5 API or ActionMailer Basics rails guide, and in fact both show "name<mail address>" in their actionmailer setup examples. Anyone know what I am doing wrong?

A: 

Rails/ActionMailer broke this:

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

And since critical bugs like this don't get high priority or interim releases to fix them in the Rails project, you either have to patch it up yourself or wait a looong time to get it fixed. Just like this insanely bad bug that came out in Rails 2.3.4 that made Rails completely unusable for Ruby 1.9: https://rails.lighthouseapp.com/projects/8994/tickets/3144-undefined-method-for-string-ror-234 . Took months to get a fix for that.

Travis R
+2  A: 

From the ticket that Travis referenced, it looks as though you can possibly avoid the problem with:

  def password_reset_instructions(user)  
    subject       "Password Reset Instructions"  
    from          "Support Team<[email protected]>"  
+   headers       "return-path" => '[email protected]'
    recipients    user.email  
    sent_on       Time.now  
    body          :edit_password_reset_url => 
                   edit_password_reset_url(user.perishable_token)  
  end  

Otherwise, you can grab one of the patches noted in the ticket or wait for 2.3.6 or 3.x

Rob Biedenharn
Sorry I thought I had already responded but I don't see it here. Thanks - your solution worked like a charm!
Alan S