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?
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.
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).
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" }
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
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:
J'ai eu cette erreur en raison de l'arrêt de SENDMAIL.
Bonne chance!
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:
Modifier la prison qui contient les configurations SSH
$ Sudo nano /etc/fail2ban/jail.local
recherchez [SSH] et définissez enabled = false
puis trouvez [ssh-ddos] et définissez enabled = false
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.