2012-03-01 8 views
10

Próbowałem wszystkich rodzajów konfiguracji, ale nadal nie mogę wysłać wiadomości e-mail w moim środowisku programistycznym z szyn.Railsy 3 mailer nie działa i nie rejestruje żadnych błędów

Zainstalowałem mailutils, aby wypróbować to z linii poleceń i zadziałało, otrzymałem e-mail (oczywiście w spamie): test echo | Email -s przedmiotem [email protected]

Oto mój config:

# 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", 
} 

A oto kod w mailer:

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 

Kontroler:

class PagesController < ApplicationController 
    def home 
    UserMailer.test_email 
    end 
end 

rozwój .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) 

Próbowałem też za pomocą konsoli:

[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 ma przykład konfiguracji Gmaila. Używa "zwykłego" dla atrybutu uwierzytelnienia, czy próbowałeś go? – ismriv

+0

Tak, spróbowałem i nic się nie stało. Bez dzienników to nie zadziała. Cała reszta w żądaniu jest poprawnie rejestrowana – HappyDeveloper

+0

Jak wygląda kod wywołujący program pocztowy? –

Odpowiedz

27
UserMailer.test_email 

Wystarczy tworzy Mail::Message obiekt. Faktycznie wysłać e-mail trzeba zrobić

UserMailer.test_email.deliver 

(lub wychodząc z szyn 4,2 deliver_now/deliver_later)

+14

Ok to jest zawstydzające .. Dzięki – HappyDeveloper

+0

Ow My God! Spędziłem 3 godziny, zupełnie zapomniałem o tej metodzie! Dzięki – 0bserver07

+1

Uwaga dla szyn 5: OSTRZEŻENIE DEPRECACJI: '# dostawa' jest przestarzałe i zostanie usunięte w Railsach 5.Użyj '# delivery_now' – jtlindsey

0

Jeśli podejrzewasz, że to ustawienia, spróbuj wyjęciu: domena. To działało dla mnie jakiś czas temu. (Net::SMTPAuthenticationError in rails 3.1.0.rc5 when connecting to gmail)

Ale nie widzę opcji: body w funkcji mail. Być może to jest problem. Spróbuj wysłać go z konsoli szyn i sprawdź, co się stanie. http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail

+0

Nie działa, zaktualizowałem mój post, aby pokazać wyniki – HappyDeveloper

9

Odnośnie Rejestrowanie błędów:

Tylko zorientowali się majstrować, że istnieje metoda huk odpowiednik dla dostarcz, który zgłasza wyjątek. Może być całkiem przydatna do sprawdzenia, czy po prostu błędnie wpisałeś swoją nazwę użytkownika lub hasło, lub po prostu masz źle skonfigurowane ustawienia.

UserMailer.test_email.deliver!

1

Uaktualniona odpowiedź na Rails 4.2 będzie:

UserMailer.test_email.deliver_now! 

wykrzyknikowy znak jest podniesienie wyjątek, jeśli są jakieś błędy.

+0

Wyjaśnienie dodaje również ukrytą pilność :) –

+0

' dostarczyć_nowę! 'Dostarcza wiadomość e-mail _niewiadczyć_problemów_zasobów i podnieś_rozmieszczenie_błędów, więc używaj jej z rozwagą. http://api.rubyonrails.org/v4.2/classes/ActionMailer/MessageDelivery.html#method-i-deliver_now-21 –