web-dev-qa-db-fra.com

Errno :: ECONNREFUSED: Connexion refusée - connect (2) pour l'action mailer

Je travaille avec Rails depuis longtemps. Maintenant, je suis confronté à un petit problème dans ActionMailer. Je souhaite envoyer un courrier électronique lorsque l'utilisateur est enregistré pour confirmer son inscription. Je peux envoyer email dans le mode de développement mais où comme pas dans le mode de production.
l'exception Errno :: ECONNREFUSED: Connexion refusée - connect (2) arrive à chaque fois lorsque la méthode deliver est appelée.
J'ai écrit le code suivant.
Ma configuration SMTP ressemble à:
config.action_mailer.default_url_options = {: Host => "localhost: 3000"}

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.smtp_settings = {   
    :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,      
    :ssl => true,
    :enable_starttls_auto => true,  #this is the important stuff!
    :address        => 'smtp.xxxx.xxx',
    :port           => xxx,
    :domain         => 'xxxxxx',
    :authentication => :plain,
    :user_name      => '[email protected]',
    :password       => 'xxxxxxxxx'
  }

Dans le contrôleur, j'ai écrit ce qui suit:

def confirm_registration_in_c       
 @user = User.find_by_email([email protected])
 if @user
      UserMailer.confirm_registration(@user).deliver            
 end
end

Dans mon user_mailer.rb:

class UserMailer < ActionMailer::Base
  default from: "[email protected]"

  def confirm_registration(user)
   @user = user
   @user_name = @user.name       
   email = @user.email 
   mail(:to => email, :subject => "Reset your password")
  end
end

Je peux envoyer un email en mode développement dans mon hôte local, mais je ne peux pas envoyer l'email sur le serveur dédié.
Est-ce que quelqu'un peut m'aider s'il vous plaît?

41
VenkatK

Dans ma situation, j’ai rencontré des problèmes similaires lorsque j’essayais de créer un tutoriel d’envoi-email Rails app, les journaux Heroku ne cessaient de me dire que

......

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

......

Après avoir comparé mon code avec le code de l'auteur, j'ai découvert que je n'avais pas configuré mes configurations ActionMailer dans le fichier config/environnements/production.rb.

Ensuite, je me suis rendu compte que je venais de configurer mon config/environnements/development.rb pour l'envoi d'e-mails, mais je ne l'avais pas fait pour mon config/environnements/production.rb.

Vous pouvez donc le vérifier lorsque le comportement de votre application diffère entre développement et production.

21
oppih

Assurez-vous d'avoir correctement configuré votre port. Je suis passé de gmail en développement (port 587) à l'envoi de mon serveur local en production et je rencontrais cette erreur jusqu'à ce que je corrige le port de celui utilisé par mon serveur (port 25).

8
Sorry-Im-a-N00b

pour la production, vous ne pouvez pas écrire

config.action_mailer.default_url_options = { :Host => "localhost:3000" }

ajouter l'URL de production pour l'hôte, comme,

config.action_mailer.default_url_options = { :Host => "http://www.yourdomain.com" }
5
Pandurang Waghulde

Mon problème n'est pas identique à cette question, mais je pense que beaucoup auraient trouvé ce fil via Google.

Si vous utilisez un service SMTP externe comme sendgrid et que vous avez configuré ActionMailer en conséquence, le message d'erreur suivant s'affiche:

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

Vous transmettez peut-être le hachage de configuration avec la clé String, qui sont ignorés. Les clés doivent être symboles !

Cela peut arriver s'il est désérialisé, ce que j'ai fait est de faire en sorte que les clés soient des symboles:

config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys
3
lulalala

Il y a une autre raison à cette erreur:

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

Il convient de regarder le service SENDMAIL sur votre serveur:

  • SENDMAIL est-il installé?
  • SENDMAIL est-il en cours d'exécution?

J'ai eu cette erreur en raison de l'arrêt de SENDMAIL.

Bonne chance!

2
Taika

Je viens de retrouver un problème similaire en essayant de déployer wordpress avec Capistrano.

cap aborted! Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}

Je voudrais aussi obtenir cette erreur similaire:

Tasks: TOP => git:create_release (See full trace by running task with --trace) The deploy has failed with an error: #<Errno::ECONNREFUSED: Connection refused - connect(2) for "my-ip-address" port {my-port}>

Il s'avère que c'était un problème de sessions SSH simultanées car mon serveur exécute Fail2Ban. Pour résoudre cela, j'ai simplement fait ce qui suit:

  1. Modifier la prison qui contient les configurations SSH

    $ Sudo nano /etc/fail2ban/jail.local

  2. recherchez [SSH] et définissez enabled = false

  3. puis trouvez [ssh-ddos] et définissez enabled = false

  4. N'oubliez pas de redémarrer Fail2Ban après vos modifications et open-ssh (si c'est ce que vous utilisez)

$ Sudo service fail2ban reload

$ Sudo /etc/init.d/ssh reload

Il convient de noter que la connexion serait refusée à différentes étapes (tâches) du déploiement. Par exemple, après un redémarrage et un rapide bundle exec cap production deploy:check tout semblait aller bien. Ensuite, j'ai essayé de déployer et j'ai reçu la même erreur, mais lors de l'exécution d'une tâche différente. J'utilise également UFW que j'ai désactivé et réactivé sans problèmes. UFW n'était pas la cause du problème ci-dessus.

J'ai eu un problème similaire après avoir résolu ce problème. C'était un problème avec les permissions du répertoire current. C'est par ici.

0
Ken Prince