2015-06-23 15 views
7

Durante la mia formazione, sto lavorando a un sito Web e utilizziamo Ruby on Rails. Abbiamo bisogno di inviare mail agli utenti così ho creato un mailer.Connessione rifiutata - connessione (2) per porta "localhost" 25 binari

ho cercato di mettere lo smtp sia development.rb e environment.rb

config.action_mailer.default_url_options = {host: '0.0.0.0:3000'} 
config.action_mailer.default charset: 'utf-8' 
config.action_mailer.delivery_method = 'smtp' 
config.action_mailer.perform_deliveries = true 
config.action_mailer.smtp_settings = { 
    adress: $SMTP_SERVER, 
    port: $PORT, 
    from: $MAIL, 

    enable_starttls_auto: true 
    #authentication: 'login' 
} 

Mi dice che l'errore viene da questo metodo integrale 6

def create 
    @user = User.new(user_params) 

    respond_to do |format| 
    if @user.save 
     # Tell the UserMailer to send a welcome Email after save 
     UserMailer.welcome_email(@user).deliver_now 

     format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
     format.json { render :json => @user, :status => :created, :location => @user } 
    else 
     format.html { render :action => "new" } 
     format.json { render :json => @user.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

ho impostato la porta a 587 ma Continuo a ricevere l'errore:

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25

Sembra che un altro file stia sovrascrivendo le mie impostazioni. Ho anche visto che potrebbe essere correlato alla mia chiave ssh non autorizzata dal server.

Sai cosa c'è che non va?

Grazie in anticipo

risposta

8

Prima di tutto, quando si sviluppano su localhost, è comune a non in realtà inviare la posta, piuttosto per il trattamento che, come un dettaglio di implementazione e bastone con il comportamento di default Rails, che è quello di sputare estrarre le intestazioni ei contenuti della posta nella console STDOUT (dove è possibile verificare che il testo sia corretto). C'è una ragione specifica per cui è necessario testare l'invio di messaggi nell'ambiente dev?

In secondo luogo, hai menzionato che hai impostato le impostazioni SMTP sia in development.rb che in environment.rb. Non dovresti aver bisogno di impostare queste impostazioni due volte; in generale, utilizzerei development.rb per le impostazioni specifiche per l'ambiente di sviluppo e environment.rb solo per le impostazioni che verranno sempre applicate a tutti gli ambienti (dev, test e sul server distribuito live). Quindi, se stai impostando le stesse impostazioni sia in development.rb che in environment.rb, inizierei rimuovendo l'una o l'altra; la ridondanza renderà più difficile il tuo lavoro lungo la strada.

Infine, per risolvere il problema, inizierei chiedendo a Rails quali sono le sue impostazioni piuttosto che aspettare che la consegna della posta fallisca. Provare quanto segue:

  • Avviare rails console
  • Enter Rails.configuration.action_mailer.smtp_settings e confrontare l'hash risultante contro le vostre aspettative. Questo hash dovrebbe contenere le impostazioni della porta e del dominio che vengono utilizzate quando si invia tutta la posta (nell'ambiente corrente), quindi se ActionMailer sta tentando la porta sbagliata, allora mi aspetterei che anche la porta fosse sbagliata.

Dove stai impostando $SMTP_SERVER, $PORT e $MAIL? C'è qualche ragione per cui non usi la convenzione di Rails per le variabili di ambiente, ENV['SMTP_SERVER'] ecc.?

Spero che un po 'di quello aiuti. In bocca al lupo!

+0

Grazie per la tua risposta. Voglio testare l'invio di messaggi per capire come funziona (sono nuovo con Ruby on Rails) e voglio essere sicuro che funzioni correttamente perché non sono solo in questo progetto e non voglio rompere tutto. Ho capito che il problema proveniva dal wifi dell'università che non mi permetteva di accedere allo smtp. – TheLittleBibi

+0

OK, sembra giusto. Ma per essere chiari, la mia impressione è che Rails presume che non ti importi l'invio di messaggi in modalità sviluppo; semplifica la verifica dei contenuti del messaggio, ma si interrompe a breve distanza dalla connessione SMTP, che generalmente viene trattata come un dettaglio di configurazione del server e dell'implementazione (non fa parte del codice dell'app Rails stesso). –

+1

Il mio problema è ora risolto, il responsabile ha corretto il wifi e poi ho avuto un altro errore, perché ho scritto "" smtp "' invece di ': smtp'. – TheLittleBibi

1

sostituire

config.action_mailer.delivery_method = 'smtp' 

con

config.action_mailer.delivery_method = :smtp 

garantire la vostra Rails.configuration.action_mailer.smtp_settings è simboleggiato chiavi

+0

o rimuoverlo interamente come ': smtp' è il default adesso – lulalala