send email

Hi, i am trying to send an email using RoR version 2.1.0 but i get
some errors. I have this configuration:

1- In config/eviroment.rb, at the very end of my file:

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
   :address => "smtp.domain.com",
   :port => 25,
   :domain => "domain.com",
   :authentication => :login,
   :user_name => "user@domain.com",
   :password => "secret"
}

ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.raise_delivery_errors = true

2- app/models/Emailer i have:

class Emailer < ActionMailer::Base
    def contact_email(email_params, sent_at = Time.now)
        @recipients = "someuser@gmail.com"
        @from = email_params[:name] + " <" + email_params[:address] +
">"
        @subject = email_params[:subject]
        @sent_on = sent_at
        @body["email_body"] = email_params[:body]
        @body["email_name"] = email_params[:name]
    end
end

3- app/controllers/contact_controller i have:

class ContactController < ApplicationController
  def index
  end

  def send_mail
      Emailer::deliver_contact_email(params[:email])
  end

end

4- app/views/emailer/contact_email.rhtml i have:
Name:

<%= @email_name %>

Message:

<%= @email_body %>

5- in app/view/contact/index.html.erb have:
<% form_tag '/contact/send_mail' do %>
<table>
    <tr>
        <td><label for="email_name">Name:</label></td>
        <td><%= text_field "email", "name", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_address">Email Address:</label></td>
        <td><%= text_field "email", "address", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_subject">Subject:</label></td>
        <td><%= text_field "email", "subject", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_body">Body:</label></td>
        <td><%= text_area "email", "body", :rows => 8, :cols => 30 %></

    </tr>
</table>

<%= submit_tag 'Send Email' %>

<% end -%>

5- Errors i got:

Net::SMTPSyntaxError (502 unimplemented (#5.5.1)
):
    /usr/lib/ruby/1.8/net/smtp.rb:948:in `check_auth_continue'
    /usr/lib/ruby/1.8/net/smtp.rb:740:in `auth_login'
    /usr/lib/ruby/1.8/net/smtp.rb:921:in `critical'
    ....
    ....
    ....

I have read a lot in different forums about the same problema but no
solution found. I also asked to my hosting solution about smtp
configuration, and they said that i am using the correct information
about our smtp. So I do not have any idea of what i am doing wrong,
need help please. Any idea?

Cheers

Sounds like the mail server doesn't support the :login authentication
method (Have you tried the other options ?(:plain, :cram_md5)).
Perhaps the server requires no authentication in which case you should
just remove the :authentication option.

Fred

fRAnKEnSTEin wrote:

Hi, i am trying to send an email using RoR version 2.1.0 but i get
some errors. I have this configuration:

1- In config/eviroment.rb, at the very end of my file:

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
   :address => "smtp.domain.com",
   :port => 25,
   :domain => "domain.com",
   :authentication => :login,
   :user_name => "user@domain.com",
   :password => "secret"
}

ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.raise_delivery_errors = true

2- app/models/Emailer i have:

class Emailer < ActionMailer::Base
    def contact_email(email_params, sent_at = Time.now)
        @recipients = "someuser@gmail.com"
        @from = email_params[:name] + " <" + email_params[:address] +
">"
        @subject = email_params[:subject]
        @sent_on = sent_at
        @body["email_body"] = email_params[:body]
        @body["email_name"] = email_params[:name]
    end
end

3- app/controllers/contact_controller i have:

class ContactController < ApplicationController
  def index
  end

  def send_mail
      Emailer::deliver_contact_email(params[:email])
  end

end

4- app/views/emailer/contact_email.rhtml i have:
Name:

<%= @email_name %>

Message:

<%= @email_body %>

5- in app/view/contact/index.html.erb have:
<% form_tag '/contact/send_mail' do %>
<table>
    <tr>
        <td><label for="email_name">Name:</label></td>
        <td><%= text_field "email", "name", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_address">Email Address:</label></td>
        <td><%= text_field "email", "address", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_subject">Subject:</label></td>
        <td><%= text_field "email", "subject", :size => 30 %></td>
    </tr>
    <tr>
        <td><label for="email_body">Body:</label></td>
        <td><%= text_area "email", "body", :rows => 8, :cols => 30 %></
>
    </tr>
</table>

<%= submit_tag 'Send Email' %>

<% end -%>

5- Errors i got:

Net::SMTPSyntaxError (502 unimplemented (#5.5.1)
):
    /usr/lib/ruby/1.8/net/smtp.rb:948:in `check_auth_continue'
    /usr/lib/ruby/1.8/net/smtp.rb:740:in `auth_login'
    /usr/lib/ruby/1.8/net/smtp.rb:921:in `critical'
    ....

I have read a lot in different forums about the same problema but no
solution found. I also asked to my hosting solution about smtp
configuration, and they said that i am using the correct information
about our smtp. So I do not have any idea of what i am doing wrong,
need help please. Any idea?

Cheers

You may try telnet'ing in to port 25 of your smtp server and issuing the EHLO (or HELO) command and verify that one of the auth types supported is LOGIN.

Are you certain your server requires authentication to send email?

Cheers,
Darrik

Hi,

Thank you for your fast response. Ok i fixed the issue. The problema
was that i was using smtp as a backend in the instruction:

ActionMailer::Base.delivery_method = :smtp

Our server uses sendmail, i just changed to this:

ActionMailer::Base.delivery_method = :sendmail

and it works perfectly. :-]

But i got now another little problem(i am a noob in RoR) the app send
an error like:

ActionView::MissingTemplate (Missing template contact/
send_mail.html.erb in view path /home/lumenap/public_html/contact/app/
views):
...
...
...

The error is totally correct, because in my app/controllers/
contact_controller i have:

class ContactController < ApplicationController
  def index
  end
  def send_mail
      Emailer::deliver_contact_email(params[:email])
  end
end

As you see i am not rendering any iew, so if i want to render se same
page that i am workin with(the index) what i shuold put? I puted an
render :text => "somthing" just for testing but it does not work, gave
me the same error. How can i render the index page?

Regards,

shirkavand

Hi,

Ok i fixed that too. I just add in my controller action an redirection
to an action, like so:

class ContactController < ApplicationController
  def index
  end
  def send_mail
      Emailer::deliver_contact_email(params[:email])
      redirect_to :action => 'index'
  end
end

That works great, now everything works perfectly :).

Thank you very much for your support. Have a nice day

Shirkavand