2010-08-02 19 views
15

Próbuję utworzyć aplikację, która wysyła wiadomość e-mail, gdy użytkownik zarejestruje się.Actionmailer nie dostarcza poczty, z szynami 3

i umieścić w ustawieniach SMTP dla Gmaila w pliku config/environment.rb i funkcja poczty wygląda

mail(:to => "[email protected]", :subject => "Mail!", :from => "[email protected]", :content_type => "text/html") 

teraz kiedy widzę dzienniki, widzę, że mówi mail został wysłany ale nigdy nie otrzyma żadnej wiadomości w ogóle ...

również, gdy zgłoszę pocztę funkcję Emails.signed(@user).deliver dostarczyć, strona forma nie przekierowuje, ale działa, jeśli mogę wypowiedzieć się na e-mail podając kod, który jest albo

Emails.signed(@user).deliver 

lub

mail(:to => "[email protected]", :subject => "Mail!", :from => "[email protected]", :content_type => "text/html") 

Dzięki :)

Edit: development.rb

App::Application.configure do 
    # Settings specified here will take precedence over those in config/environment.rb 

    # In the development environment your application's code is reloaded on 
    # every request. This slows down response time but is perfect for development 
    # since you don't have to restart the webserver when you make code changes. 
    config.cache_classes = false 

    # Log error messages when you accidentally call methods on nil. 
    config.whiny_nils = true 

    # Show full error reports and disable caching 
    config.consider_all_requests_local  = true 
    config.action_view.debug_rjs    = true 
    config.action_controller.perform_caching = false 

    # Don't care if the mailer can't send 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.perform_deliveries = true 

    # Print deprecation notices to the Rails logger 
    config.active_support.deprecation = :log 

end 
+0

Czy próbujesz wysłać go na temat rozwoju lub produkcji? wklej plik 'development.rb' lub' production.rb'. – jpemberthy

+0

Jestem w trybie programowania ... Dodałem development.rb – Amit

+0

Hej, proszę sprawdzić poniższy post, i daj nam znać, jeśli nadal masz problemy. http://asciicasts.com/episodes/206-action-mailer-in-rails-3 Powinien działać, jeśli poprawnie skonfigurowałeś ustawienia SMTP w Gmailu. – jpemberthy

Odpowiedz

35

Trochę późno, ale jednak może to uratuje komuś kilka godzin uderzanie głową. Jest to prawdopodobnie istotne tylko w przypadku wysyłania e-maili z Gmaila. Po pierwsze, w celu ułatwienia debugowania sytuację, ustaw następujący wiersz w development.rb true (zakładając, że jesteś w trybie rozwoju):

config.action_mailer.raise_delivery_errors = true 

To sprawi ActionMailer nie milcząco ignorować błędy. Kiedy to zrobiłem, zrozumiałem, że Gmail odmawia mojej nazwy użytkownika i hasła. Potem poszedłem do mojego pliku konfiguracyjnego, w którym umieściłem wszystkie dyrektywy konfiguracyjne Action Mailer (dla mnie było to w development.rb, jest prawdopodobnie lepsze miejsce na jego umieszczenie) i zauważyłem, że: nazwa_użytkownika została ustawiona raczej na "admin" niż "[email protected]". Zmiana rozwiązała problem. Oto moja poprawione część development.rb:

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => 'thedomain.com', 
    :user_name   => '[email protected]', 
    :password    => '<password>', 
    :authentication  => 'plain', 
    :enable_starttls_auto => true } 

Referencje:

http://forums.pragprog.com/forums/43/topics/541 http://edgeguides.rubyonrails.org/action_mailer_basics.html

7

Inną rzeczą, aby nie zapomnieć: trzeba ponownie uruchomić aplikację po wprowadzeniu zmian w plikach konfiguracyjnych środowiska . przy użyciu pasażera może zostać szybko brakowało :)

to właśnie rozwiązać mój „problem”, gdy ActionMailer nie chcieliśmy, aby wysłać e-maile nie wykazując żadnych błędów ..

+0

Czułem się jak głupiec, gdy zdałem sobie sprawę, że nie zrestartowałem mojego serwera. Sprawdził się doskonale po zrestartowaniu mojego serwera. Jednak mój plik dziennika tworzył dzienniki, które zawierały dokładnie te same informacje przed i po tym, jak edytowałem swój kod, co spowodowało, że myślałem, że rozpoznaje moje zmiany. Uważam, że było tak dlatego, że musiałem zrestartować serwer, zanim faktycznie zaczął on zgłaszać błędy dostawy, co było moją zmianą w pliku konfiguracyjnym. Jeśli więc poinformowałeś go, że chcesz zacząć zgłaszać błędy dostawy, ale problem nie został ponownie uruchomiony, problem nie będzie widoczny, dopóki nie zrestartujesz serwera. – Matt

6

Rzeczy napisane tutaj mi nie pomoże.

Używam Rails 3.2.8 i spędziłem kilka godzin próbując dojść do tego i na końcu było bardzo prosto. Zapomniałem wywołać .deliver() na obiekcie Mail::Message, który jest zwracany przez wywołanie metody mail(:to => @user.email, :subject => 'Welcome to the Site').

Po prostu zostaw wszystko jak to jest określone w official RoR tutorial.

Oznacza to, że w swoim rozwoju/plików środowisku produkcyjnym, jak zrobić sekcję:

# mailer 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.delivery_method = :smtp 

    config.action_mailer.smtp_settings = { 
     address:    'smtp.gmail.com', 
     port:     587, 
     domain:    'gmail.com', 
     user_name:   '<username>@gmail.com', 
     password:    '<password>', 
     authentication:  'plain', 
     enable_starttls_auto: true 
    } 

a następnie podklasy ActionMailer :: Base, na przykład tak:

class InfoMailer < ActionMailer::Base 
    default from: "<username>@gmail.com" 

    def welcome_user_and_send_password(user, password) 
    default_url_options = self.default_url_options() 


    @user = user 
    @password = password 
    @url = default_url_options[:host] 
    mail(:to => @user.email, :subject => 'Welcome to the Site').deliver() 
    end 

end 

Po tym , możesz po prostu użyć tej metody InfoMailer z kodu jak metoda klasy:

InfoMailer.welcome_user_and_send_password(user, password) 
0

Jeśli używasz środowiska testowego, pamiętaj o skomentowaniu tego wiersza kodu w środowiskach/test.rb:

config.action_mailer.delivery_method = :test 
Powiązane problemy