it-swarm.com.de

Errno :: ECONNREFUSED: Verbindung abgelehnt - connect (2) für Action Mailer

Ich arbeite seit langem mit Rails. Jetzt habe ich ein kleines Problem im ActionMailer. Ich möchte eine E-Mail senden, wenn der Benutzer registriert wird, um seine Registrierung zu bestätigen. Ich kann senden E-Mail im Entwicklungsmodus aber wo als nicht im Produktionsmodus.
Die Ausnahme Errno :: ECONNREFUSED: Verbindung abgelehnt - connect (2) kommt jedes Mal, wenn die Methode deliver aufgerufen wird.
Ich habe den folgenden Code geschrieben.
Meine SMTP-Konfiguration sieht folgendermaßen aus:
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'
  }

Im Controller habe ich folgendes geschrieben:

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

In meiner user_mailer.rb:

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

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

Ich kann E-Mails im Entwicklungsmodus auf meinem lokalen Host senden, aber ich kann die E-Mails nicht auf dem dedizierten Server senden.
Kann mir bitte jemand helfen?

41
VenkatK

In meiner Situation stieß ich auf ähnliche Probleme, als ich versuchte, über eine E-Mail zu senden Rails App-Tutorial, die Heroku-Protokolle sagten mir immer wieder, dass

......

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

......

Nachdem ich meinen Code mit dem Code des Autors verglichen hatte, musste ich feststellen, dass ich meine ActionMailer-Konfigurationen nicht in der Datei config/surroundings/production.rb eingerichtet hatte .

Dann wurde mir klar, dass ich gerade mein config/surroundings/development.rb für das Versenden von E-Mails konfiguriert hatte, aber ich hatte es nicht für mein config/environ/production.rb .

So können Sie überprüfen, ob sich das Verhalten Ihrer App zwischen Entwicklung und Produktion unterscheidet.

21
oppih

Stellen Sie sicher, dass Sie Ihren Port richtig konfiguriert haben. Ich habe in der Entwicklung von Google Mail (Port 587) auf das Senden von meinem lokalen Server in der Produktion umgestellt und diesen Fehler erhalten, bis ich den Port auf den von meinem Server verwendeten korrigiert habe (Port 25).

8
Sorry-Im-a-N00b

für die Produktion kann man nicht schreiben

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

produktions-URL für Host hinzufügen, wie,

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

Mein Problem ist nicht identisch mit dieser Frage, aber ich glaube, viele würden diesen Thread über Google finden.

Wenn Sie einen externen SMTP-Dienst wie sendgrid verwenden und ActionMailer entsprechend eingerichtet haben, wird dennoch der folgende Fehler angezeigt:

Errno :: ECONNREFUSED: Verbindung abgelehnt - connect (2) für "localhost" Port 25

Möglicherweise übergeben Sie den Konfigurations-Hash mit dem String-Schlüssel, der ignoriert wird. Schlüssel müssen Zeichen sein!

Dies kann passieren, wenn es de-serialisiert ist. Ich habe dafür gesorgt, dass Schlüssel Symbole sind:

config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys
3
lulalala

Es gibt einen weiteren Grund für diesen Fehler:

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

Es sollte auf SENDMAIL-Dienst auf Ihrem Server gesucht werden:

  • Ist SENDMAIL installiert?
  • Läuft SENDMAIL?

Ich hatte diesen Fehler aufgrund der gestoppten SENDMAIL.

Viel Glück!

2
Taika

Ich habe gerade ein ähnliches Problem aufgespürt, als ich versuchte, wordpress mit Capistrano zu implementieren.

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

Ich würde auch diesen ähnlichen Fehler bekommen:

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}>

Es stellte sich heraus, dass es ein Problem mit gleichzeitigen SSH-Sitzungen war, da mein Server Fail2Ban ausführt. Um das zu lösen, habe ich einfach folgendes gemacht:

  1. Bearbeiten Sie das Gefängnis, das SSH-Konfigurationen enthält

    $ Sudo nano /etc/fail2ban/jail.local

  2. suche nach [SSH] und setze enabled = false

  3. suchen Sie dann [ssh-ddos] und setzen Sie enabled = false

  4. Denken Sie daran, Fail2Ban nach Ihren Änderungen und Open-SSH neu zu starten (falls Sie dies verwenden).

$ Sudo service fail2ban reload

$ Sudo /etc/init.d/ssh reload

Es ist zu beachten, dass die Verbindung bei verschiedenen Schritten (Tasks) in der Bereitstellung abgelehnt wird. Zum Beispiel nach einem Neustart und einem schnellen bundle exec cap production deploy:check alles schien in Ordnung zu sein. Dann habe ich versucht, den gleichen Fehler zu implementieren, aber während der Ausführung einer anderen Aufgabe. Ich verwende auch UFW, das ich ohne Probleme deaktiviert und wieder aktiviert habe. UFW war nicht die Ursache des obigen Problems.

Nachdem ich das gelöst hatte, hatte ich ein ähnliches Problem. Es gab ein Problem mit den Verzeichnisberechtigungen current. Das ist hier drüben.

0
Ken Prince