2014-10-02 16 views
9

Quando eseguo il mio programma di posta in modalità di sviluppo, ottengo il seguente errore:Rails 4: Net :: ReadTimeout al momento della chiamata ActionMailer

Net::ReadTimeout in SchoolApplicationsController#create 

Ecco il metodo di controllo che sta ottenendo il timeout

def create 
    @school_application = SchoolApplication.new(school_application_params) 
    @school_application.program_cost = @school_application.calculate_cost_to_charge(params[:school_application][:program], params[:school_application][:duration]) 
    if @school_application.save 
     Rails.logger.debug("Hey mufugga") 
     NotificationsMailer.send_application(@school_application).deliver 
     redirect_to application_path(@school_application.id) 
    else 
     Rails.logger.debug(@school_application.errors.full_messages) 
      @school_application.errors.full_messages.each do |msg| 
     flash.now[:error] = msg 
     end 
     render action: "new" 
    end 
    end 

Sono positivo l'errore è causato dalla chiamata NotificationsMailer perché quando lo commento, non ottengo più l'errore.

Ecco il mio programma di posta, e le impostazioni:

class NotificationsMailer < ActionMailer::Base 

    default :from => "[email protected]" 
    default :to => "[email protected]" 

    def send_application(application) 
    @application = application 
    mail(:subject => "New Application") 
    end 
end 

Ecco le mie impostazioni environments/development.rb smtp:

Fls::Application.configure do 
    # Settings specified here will take precedence over those in config/application.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 web server when you make code changes. 
    config.cache_classes = false 

    # Do not eager load code on boot. 
    config.eager_load = false 

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

    # Don't care if the mailer can't send. 

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

    # Raise an error on page load if there are pending migrations 
    config.active_record.migration_error = :page_load 

    # Debug mode disables concatenation and preprocessing of assets. 
    # This option may cause significant delays in view rendering with a large 
    # number of complex assets. 
    config.assets.debug = true 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 

    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    address:    'secure3209.hostgator.com', 
    port:     465, 
    domain:    'fls.net', 
    ssl: true, 
    user_name:   ENV['fls_username'], 
    password:    ENV['fls_password'], 
    authentication:  'plain', 
    enable_starttls_auto: true } 
end 

Quando scrivo ENV['fls_username'] nella console Rails ottengo il giusto valore. Lo stesso con la password. Il nome utente è nel formato [email protected] È corretto o il formato giusto è solo "utente" e il dominio è implicito dal parametro domain?

risposta

27

Dopo aver letto questo post ho preso un altro sguardo alle mie impostazioni SMTP e ha aggiunto

tls: true 

cambiato port: 465 a port: '465' come ho notato che la maggior parte delle persone scrivono come una stringa. Allo stesso modo cambiato anche la stringa "plain" al simbolo :plain

+6

Sembra che "tls: true" sia la chiave. Non credo che gli altri cambiamenti contengano. (Si noti anche che 'tls', non' tsl'.) –

+0

Confermo, aggiungendo che 'tls: true' ha funzionato. – mwangi

+1

questo ha funzionato anche per me, ma vorrei avere indietro l'ultima ora della mia vita. –

-1

aggiuntivo seguente codice nel Da inizializzare

require 'net/smtp' 

module Net 
    class SMTP 
    def tls? 
     true 
    end 
    end 
end 
1

ho affrontato il problema simile quando collego la posta SMTP per qq posta (posta commerciale). Ho aggiornato le mie impostazioni seguendo la post come come di seguito:

config.action_mailer.smtp_settings = { 
address:    'smtp.exmail.qq.com', 
port:     '465', 
domain:    'groobusiness.com', 
user_name:   ENV['GMAIL_USER_NAME'], 
password:    ENV['GMAIL_PASSWORD'], 
authentication:  :plain, 
enable_starttls_auto: true, 
openssl_verify_mode: 'none', 
ssl:     true, 
tls:     true 
} 

E la questione ottenuto risolto. Spero che possa essere utile per qualcuno che sta affrontando questo problema.

Problemi correlati