рельсы 3 проблема отправки электронной почты - PullRequest
2 голосов
/ 14 марта 2011

Я использую Rails 3 и реализую функцию отправки электронной почты.Я не уверен, что моя конфигурация правильная, но вот мои коды:

mailers / user_mailer.rb

class UserMailer < ActionMailer::Base
  default :from => "user@gmail.com"

  def send_to(user)
    @user = user
    subject='welcome !'
    mail(:to=>'y.lan@gmail.com', :subject=>subject, :content_type => "text/html")
    mail.deliver
  end
end

контроллер :

def CarsController < BaseController
  ... 
  def register_finish
    UserMailer.send_to(user)
  end

end

config / enviroment.rb

config.action_mailer.delivery_method = :smtp

 config.action_mailer.smtp_settings = {
     :address => "smtp.googlemail.com",
     :port => 532,
     :arguments => '-i'
    :enable_starttls_auto => true
   }

  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

Когда мой контроллер вызывает функцию 'register_finish' и пытается отправить электронное письмо пользователю, я всегда получаю Тайм-аут :: Ошибка (срок выполнения истек) Сообщение об ошибке, в чем может быть причина ??

Я видел, как некоторые люди определяют конфигурацию в config / initializers / setup_email.rb и используйте

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = { ...}

, пока я настраиваю его в config / enviroment.rb и использую:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {...}

Я также видел, как некоторые люди вызывают метод "доставки" внутриКонтроллер, пока я вызываю его внутри 'UserMailer'.

Мои вопросы :

  1. В чем разница между моей реализацией и вышеуказанным другим способом реализацийЯ нашел из интернета.

  2. Почему я получил ошибки тайм-аута?

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

Я также использую gmail в качестве SMTP-сервера и добавляю инициализатор setup_email.rb для инициализаторов, содержащих этот код

ActionMailer::Base.smtp_settings = {
   :address              => "smtp.gmail.com",
   :port                 => 587,
   :domain               => "domain.pl",
   :user_name            => "username",
   :password             => "password",
   :authentication       => "plain",
   :enable_starttls_auto => true
}

и у меня это работает :) 1004 *

EDIT

Я только что заметил, что мы используем разные серверы, может быть, попробуйте с моим конфигом?

2 голосов
/ 14 марта 2011

Ошибки тайм-аута означают, что есть некоторые ошибки аутентификации.

Эта строка больше не нужна:

ActionMailer::Base.delivery_method = :smtp

Хотя рекомендуется установить smtp_settings в инициализаторе.

Если вы используете его на компьютере разработчика, эта конфигурация должна работать с gmail:

ActionMailer::Base.smtp_settings = {
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'your_domain',
:authentication => :plain,
:user_name => 'your_gmail_username',
:password => 'your_gmail_password'
}

EDIT

вы можете добавить для машины разработки:

ActionMailer::Base.default_url_options[:host] = "localhost:3000"

Очень хороший Railscast на предмет

0 голосов
/ 14 марта 2011

Посмотрите на это: http://lindsaar.net/2010/3/15/how_to_use_mail_and_actionmailer_3_with_gmail_smtp

Прекрасно работает для меня

...