Ответ 1
UserMailer.test_email
Просто создает объект Mail::Message
. Чтобы действительно отправить электронное письмо, вам нужно сделать
UserMailer.test_email.deliver
(или начиная с рельсов 4.2 deliver_now
/deliver_later
)
Я пробовал всевозможные конфигурации, но все же я не могу отправить электронное письмо в свою среду разработки из рельсов.
Я установил mailutils, чтобы попробовать это из командной строки, и он работал, я получил электронное письмо (в спаме, конечно): echo test | mail -s Subject [email protected]
Здесь моя конфигурация:
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true # still no logs about emails
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true # I can't believe I have to add this option. Does it even exist? I found it on google.
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => :login,
:user_name => "[email protected]",
:password => "abc123",
}
И вот код в почтовом ящике:
class UserMailer < ActionMailer::Base
default :from => "[email protected]"
def test_email
Rails.logger.debug 'test_email'
mail(:to => '[email protected]', :subject => "testing rails")
end
end
Контроллер:
class PagesController < ApplicationController
def home
UserMailer.test_email
end
end
development.log:
[2012-03-01 18:26:45.859] DEBUG [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] test_email
[2012-03-01 18:26:45.888] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered user_mailer/test_email (1.6ms)
[2012-03-01 18:26:45.898] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered pages/home.html.erb within layouts/application (1.1ms)
[2012-03-01 18:26:46.815] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Completed 200 OK in 455ms (Views: 112.4ms)
Я также попытался использовать консоль:
[email protected]:/srv/www/myapp# rails c
Loading development environment (Rails 3.2.1)
irb(main):001:0> UserMailer.test_email
=> #<Mail::Message:32110400, Multipart: false, Headers: <To: [email protected]>, <Subject: testing rails>, <Mime-Version: 1.0>, <Content-Type: text/html>>
UserMailer.test_email
Просто создает объект Mail::Message
. Чтобы действительно отправить электронное письмо, вам нужно сделать
UserMailer.test_email.deliver
(или начиная с рельсов 4.2 deliver_now
/deliver_later
)
Что касается ошибок регистрации:
Просто выяснилось, что по-разному используется экземпляр метода bang для доставки, который генерирует исключение. Может быть очень полезно проверить, если вы просто ошибочно написали свое имя пользователя или пароль, или у вас есть некорректные настройки.
UserMailer.test_email.deliver!
Обновленный ответ для Rails 4.2:
UserMailer.test_email.deliver_now!
Восклицательный знак должен вызвать исключение, если есть какие-либо ошибки.
Если вы подозреваете, что это ваши настройки, попробуйте вынуть домен:. Это сработало для меня некоторое время назад (Net:: SMTPAuthenticationError в rails 3.1.0.rc5 при подключении к gmail)
Но я не вижу опции: body в функции mail
. Возможно, этот вопрос. Попробуйте отправить его с консоли rails и посмотреть, что произойдет. http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail