2012-03-01 2 views
10

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

Я установил mailutils, чтобы попробовать это из командной строки, и это сработало, я получил электронное письмо (в спаме, конечно): echo test | почта -s Тема [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 

развитие .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>> 
+0

http://guides.rubyonrails.org/action_mailer_basics.html имеет пример конфигурации GMail. Он использует «plain» для атрибута аутентификации, вы попробовали? – ismriv

+0

Да, я попробовал, и ничего не случилось. Без каких-либо журналов это не сработает. Все остальное в запросе зарегистрировано правильно – HappyDeveloper

+0

Как выглядит код, вызывающий почтовую программу? –

ответ

27
UserMailer.test_email 

Просто создает Mail::Message объект. Чтобы действительно отправить по электронной почте, что вам нужно сделать

UserMailer.test_email.deliver 

(или начиная с рельсами 4.2 deliver_now/deliver_later)

+14

Хорошо, это неловко .. Спасибо – HappyDeveloper

+0

Ow My God! Я потратил 3 часа, полностью забыл об этом методе! Спасибо – 0bserver07

+1

Примечание для рельсов 5: ПРЕДОСТЕРЕЖЕНИЕ ПРЕДУПРЕЖДЕНИЯ: '# deliver' устарел и будет удален в Rails 5.Используйте '# deliver_now' – jtlindsey

0

Если вы подозреваете, что это ваши настройки, попробуйте вынимая: домен. Это сработало для меня некоторое время назад. (Net::SMTPAuthenticationError in rails 3.1.0.rc5 when connecting to gmail)

Но я не вижу вариант: body в функции mail. Возможно, в этом и проблема. Попробуйте отправить его с консоли rails и посмотреть, что произойдет. http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail

+0

Не работал, я обновил сообщение, чтобы показать результаты – HappyDeveloper

9

Что касается ошибок протоколирования:

Просто просчитанные мастерить что метод взрыва аналог существует который выдает исключение. Может быть очень полезно проверить, если вы просто ошибочно написали свое имя пользователя или пароль, или у вас просто есть некорректные настройки.

UserMailer.test_email.deliver!

1

Обновленный ответ на Rails 4.2 будет:

UserMailer.test_email.deliver_now! 

Восклицательный знак является возбудит исключение, если есть какие-либо ошибки.

+0

Восклицание также добавляет подразумеваемую срочность :) –

+0

' deliver_now! 'Предоставляет электронное письмо _without_, проверяя параметры__поступления и raise_delivery_errors, поэтому используйте с осторожностью. http://api.rubyonrails.org/v4.2/classes/ActionMailer/MessageDelivery.html#method-i-deliver_now-21 –

Смежные вопросы