Help please with email

I'm attempting to get email working and I should mention in Development. Generating some errors and hope some one might catch my mistake.

Controller call: def register u = User.new(params[:user]) u.save @session['user'] = u.id RegMailer.deliver_greeting(u) # this is the line that's throwing the error - redirect_to :controller => "main", :action => "welcome"

Here is the error: undefined local variable or method `user' for #<RegMailer:0x36c2f58>

RAILS_ROOT: ./script/../config/.. Application Trace | Framework Trace | Full Trace

#{RAILS_ROOT}/app/models/reg_mailer.rb:14:in `greeting' #{RAILS_ROOT}/app/controllers/main_controller.rb:7:in `register'

Here is the mailer: class RegMailer < ActionMailer::Base   def greeting(sent_at = Time.now)     @subject = 'Thank you for registering'     @body["first_name"]= user.first_name     @recipients["email"] = user.email     @from = 'lurkkcom@lurkingforwork.com'     @sent_on = sent_at   end end

Here is the view: Dear <%= @u.first_name %> Thank you for signing up at our webiste.

I'm not even sure why the argument to def greeting is "sent_at = Time.now" I went along with the same from AWDWR. Where in just setting up an email in Ruby and ActionMailer I sent mail using def simple_message(recipient) which seemed to work.

Stuart

Hmmm....still aggrevating me with a new error:

"NoMethodError in MainController#register You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occured while evaluating nil.="

Here is the mailer def greeting(user)     @subject = 'Thank you for registering'     @body["first_name"]= user.first_name     @recipients["email"] = user.email     @from = '****@*****.com'     @sent_on = sent_at   end

and the action : def register     u = User.new(params[:user])     u.save     @session['user'] = u.id     RegMailer.deliver_greeting(u) <--------------ACTION for Mailer     redirect_to :controller => "main", :action => "welcome"   end

Stuart

I think I'm almost there but down it's bombing on :

SocketError in MainController#register

getaddrinfo: no address associated with hostname.

Everything seems to be in order From config/environments/development.rb:

# Base delivery ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.server_settings = {     :address => "mail.******.com",     :port => 25,     :domain => "*****.com",     :authentication => :login,     :user_name => "**********",     :password => "**********" }

ActionMailer::Base.default_charset = "utf-8"

These are the correct settings for my smtp server (minus what's blanked by asterix)

Stuart

I don't know if that's true, from what I read you configure in the development config file and then should be allowed to send my mail through and SMTP server. I've done it via regular Ruby program with ActionMailer not sure why Rails would be any different.

Right now I'm still getting : getaddrinfo: no address associated with hostname.

Anyone have any ideas why ? Everything looks fine in the config file.

Stuart

Thanks Michael, I'll play around with the settings as you suggest. I still wonder if something else within Rails is causing the issue. My Ruby email program has the same settings as the environment.rb in Rails, except that from what I see Rails uses double quotes, and the Ruby has single quotes around the parameter. Didn't seem to matter much though.

Stuart

Stuart - one more thing to think about... mail.XXX.com may be your incoming server name - not the outgoing server name. Mine is smtpout.XXX.com. Maybe this isn't the case since you have it working elsewhere but just a thought.

Regards,

Michael

I just got back to working on this and did a registration to test. This time the getaddrinfo error wasn't thrown, but I haven't seen an email come through either. I opened the development log and saw this:

Sent mail:

Haven't seen a reply come through so I'm throwing this out again. Not sure what the code issues are but I want to send an email when a new user registers. I'm capturing their information in the variable u and that works for database entry. Problem is passing it over to the mailer. I'm guess becuase u is a local it's not making it across to the mailer. From the log the email is working but it says it went to user@email.com. :slight_smile:

Would like some suggestions maybe.

I made all the syntax corrections and now the development log shows it's being sent to the correct email address. Still no email is coming through and so now I'm wondering if it's a configuration issue with ActionMailer. I believe that in order to actually use mailers in development mode you make all the specific configurations in config/environments/development.rb which I've done. I went ahead to make sure that i could connect to my remote smtp server via a Ruby program. Again the Ruby program sends the mail (and it's using ActionMailer). Rails though is not sending the email ?

Stuart

I also want to add that I put the configuration in environment.rb as well. Still no change. Stuart

One more thing : I've set the following line (instead of default) config.action_mailer.raise_delivery_errors = true and not seeing any errors in dev log.

Stuart

bump! sorry this is driving me nuts, development log say mail is sending ,but the mail is not coming through. Just to review here I've set ActionMailer configuration options in config/environments/development.rb.

# I want to see errors raised config.action_mailer.raise_delivery_errors = true

# Base delivery ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.server_settings = {     :address => "mail.mydomain.com",     :port => 25,     :domain => "mydomain.com",     :user_name => "myusername",     :password => "mypassword",     :authentication => :login }

ActionMailer::Base.default_charset = "utf-8"

Just to show what's in the dev log:

e[4;35;1mSQL (0.078000)e[0m e[0mCOMMITe[0m Sent mail:

Wait here is something weird! I started thinking maybe something is wrong with the local server (webrick) and considered trying mongrel. However instead of loading up the app in firefox via webrick and just run it in RadRails under port 3003. Trying to register 3 x I get recognition errors. Very odd since things were working right before. 4th time registration succeeds and the email goes through.

So it's got to be something in my browser (only thing I can think of). Though I'm not entirely sure what browser RadRails is using. Then there is the weirdness of the browser inside RadRails giving me routing errors (recognition).

Oiiiiiiiiiiiii! Stuart

Stuart,

What do you get in the console?

script/console RegMailer.deliver_greeting( User.find_by_id( your_id ) )

If you get something like #<TMail::Mail port=#<TMail::StringPort:id=0x11b3e3e>
bodyport=#<TMail::StringPort:id=0x11b2462>>

then it's most likely something outside of your app. I'm thinking
your ISP doesn't allow that sort of traffic. If that's the problem,
you can get around it if your host allows mail to be sent on an
alternate port (!= 25). I know Dreamhost allows that sort of
shenanigans.