web-dev-qa-db-fra.com

Connexion refusée - connect (2) pour le port "localhost" 25 rails

Pendant ma formation, je travaille sur un site web et nous utilisons Ruby on Rails. Nous devons envoyer des mails aux utilisateurs donc j'ai créé un mailer.

J'ai essayé de mettre le smtp dans les deux development.rb et 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'
}

Il me dit que l'erreur vient de cette ligne de méthode 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

J'ai défini le port sur 587 mais je reçois toujours l'erreur:

Errno :: ECONNREFUSED: Connexion refusée - connect (2) pour le port "localhost" 25

Il semble qu'un autre fichier écrase mes paramètres. J'ai également vu qu'il pourrait être lié à ma clé ssh non autorisée par le serveur.

Tu sais ce qui ne va pas?

Merci d'avance

12
TheLittleBibi

Tout d'abord, lors du développement sur localhost, il est courant pas d'envoyer réellement du courrier, plutôt de le traiter comme un détail de déploiement et de s'en tenir au comportement par défaut Rails qui est de cracher les en-têtes et le contenu du courrier dans la console STDOUT (où vous pouvez vérifier que le texte semble correct). Y a-t-il une raison spécifique pour laquelle vous devez tester l'envoi de messages dans l'environnement de développement?

Deuxièmement, vous avez mentionné que vous définissiez les paramètres SMTP dans development.rb et environment.rb. Vous ne devriez pas avoir besoin de définir ces paramètres deux fois; en général, j'utiliserais development.rb pour les paramètres spécifiques à l'environnement de développement et environment.rb uniquement pour les paramètres qui s'appliqueront toujours à tous les environnements (développement, tests et sur le serveur déployé en direct). Donc, si vous définissez les mêmes paramètres dans development.rb et environment.rb, je commencerais par supprimer l'un ou l'autre; la redondance ne fera que rendre votre travail plus difficile sur la route.

Enfin, pour résoudre ce problème, je commencerais par demander Rails quels sont ses paramètres plutôt que d'attendre l'échec de la remise du courrier. Essayez ce qui suit:

  • Commencez Rails console
  • Entrer Rails.configuration.action_mailer.smtp_settings et comparez le hachage résultant à vos attentes. Ce hachage doit contenir les paramètres de port et de domaine qui sont utilisés lors de l'envoi de tous les messages (dans l'environnement actuel), donc si ActionMailer essaie le mauvais port, je m'attends à ce que le port soit incorrect ici aussi.

Où mettez-vous $SMTP_SERVER, $PORT et $MAIL? Y a-t-il une raison pour laquelle vous n'utilisez pas la convention Rails pour les variables d'environnement, ENV['SMTP_SERVER'] etc.?

J'espère que cela vous aidera. Bonne chance!

12
Topher Hunt

remplacer

config.action_mailer.delivery_method = 'smtp'

avec

config.action_mailer.delivery_method = :smtp

Assurez-vous que vos Rails.configuration.action_mailer.smtp_settings sont des clés symbolisées

4
montells

L'application peut utiliser mailcatcher gem pour tous les e-mails sortants en cours de développement, que vous n'avez pas installés ou que vous n'avez pas exécutés. C'était du moins mon problème. Vérifiez https://mailcatcher.me et suivez les instructions données.

1
The Whiz of Oz

Vous devez supprimer config.action_mailer.perform_deliveries = true ligne.

0
Kimprap

Je rencontrais ce problème lors de l'exécution de Sidekiq::Worker.drain_all dans mes tests RSpec, et ça me rendait fou parce que j'avais config.action_mailer.delivery_method = :test dans mon config/environments/test.rb.

La solution consistait à définir config.action_mailer.delivery_method = :test dans mon config/environments/development.rb, ce qui prête à confusion parce que l'implication est que mon config/environments/development.rb remplace mon config/environments/test.rb dans mes tests RSpec.

Quoi qu'il en soit, cela pourrait résoudre le problème pour les autres.

0
mrmicrowaveoven