Wie richte ich eine E-Mail-Bestätigung mit Devise ein?

127

Gibt es ein Tutorial, in dem erklärt wird, wie Sie die Anmeldebestätigungs-E-Mail von Devise von Grund auf neu einrichten (sowohl in der Entwicklung als auch in der Produktion), dh wenn Sie Action Mailer nicht eingerichtet haben?

Bei der Google-Suche sind gerade einige separate Artikel zu diesem Thema aufgetaucht. Kein Stück erklärt genug, und ich bin mir nicht sicher, wie sie zusammenpassen. Gibt es da draußen eine schrittweise Erklärung oder sogar etwas, das die ersten Schritte erklärt?


Endlich hat es funktioniert. Befolgen Sie alle Schritte in der unten akzeptierten Antwort und fügen Sie dann Folgendes zu meiner Datei environment.rb hinzu:

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :tls => true,
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => :login,
   :user_name => "[username]",
   :password => "[password]"
 }
jyli7
quelle

Antworten:

208

1. Stellen Sie sicher, dass Sie bestätigbar in Model.devise aufrufen

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmable ...
end

2. Stellen Sie sicher, dass Sie der Benutzermigration eine Bestätigung hinzufügen

create_table :users do |t|
  t.database_authenticatable
  t.confirmable
  ...
end

Wenn Sie devise 2.0+ verwenden, schlägt dies fehl, da devise keine Migrationshilfen mehr bereitstellt und daher t.confirmableeinen Fehler auslöst. Kopieren Sie stattdessen den Block mit der Bezeichnung "Bestätigbar" aus dem Migrationshandbuch .

3. Generieren Sie die Entwurfsansichten mit einem der folgenden Befehle, damit Sie die Entwurfsmaileransichten überschreiben können:

rails generate devise:views # global
rails generate devise:views users # scoped

Sie können jetzt die Maileransichten in devise/mailer/confirmation_instructions.html.erboder users/mailer/confirmation_instructions.html.erbabhängig von Ihrem Setup überschreiben

4. Fügen Sie für die Entwicklungsumgebung die folgenden Konfigurationszeilen hinzu/config/environments/development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

5. Für die Produktionsumgebung in können /config/environments/production.rbSie Folgendes verwenden (vorausgesetzt, Sie haben einen SMTP-Server auf localhost: 25):

config.action_mailer.default_url_options = {:host => 'yourdomain.com'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "127.0.0.1",
  :port    => 25,
  :domain  => 'yourdomain.com'
}

6 Um das Setup in der Entwicklung zu testen, installieren Sie das Mailcatcher-Juwel, das Sie in der Entwicklung als SMTP-Server verwenden. Fangen Sie alle eingehenden E-Mails ab und zeigen Sie sie an http://localhost:1080/:

gem install mailcatcher

Nach der Installation starten Sie den Mailcatcher-Server mit dem folgenden Befehl:

mailcatcher

Auf Port 1025 wird ein Spielzeug-SMTP-Server ausgeführt, der E-Mails abfängt und auf HTTP-Port 1080 verschiebt.

Sie können jetzt ein Konto erstellen und die Bestätigungen anzeigen.

Clyfe
quelle
Wow, danke für diese erstaunlich umfassende Antwort. Ich habe es so funktioniert, dass der Mail-Catcher die E-Mails abfängt, aber keine E-Mail wird tatsächlich in meinem Posteingang angezeigt. Ich habe zwei verschiedene E-Mail-Adressen ausprobiert und die Spam-Ordner in beiden überprüft. Gibt es etwas, das mir hier fehlen könnte? (Ich bin im Entwicklungsmodus).
Jyli7
1
In der Entwicklung müssen Sie die E-Mails nicht tatsächlich an die Adresse senden. Mailcatcher verfügt über eine Weboberfläche auf localhost: 1080 , über die Sie die abgefangenen E-Mails öffnen und anzeigen können - genau darum geht es, um es Ihnen bei der Entwicklung zu vereinfachen. In der Produktion möchten Sie jedoch einen echten SMTP-Server verwenden (Google Apps, Qmail, Postfix usw. sprechen mit Ihrem Systemadministrator)
Clyfe
3
Und vergessen Sie nicht, Ihren Server neu zu starten!
Matt Bond
10
Devise 2.0 nicht mehr bietet Migration Helfer, und so t.confirmablewirft einen Fehler. Kopieren Sie stattdessen den Block mit der Bezeichnung "Bestätigbar" aus dem Migrationshandbuch: github.com/plataformatec/devise/wiki/…
Ross Allen
1
Tolles Tutorial ... danke fürs Teilen .. +1 .. Auch sehenswert How To: Add: Bestätigbar für Benutzer Seite.
Arup Rakshit
7

Ich glaube, Sie sollten es noch einmal bearbeiten ... Port-Nr. sollte in Anführungszeichen stehen .. So: -

:port => "587",

Ich hatte ein Problem mit Rails 3.2.0 / Ruby 1.9.2


quelle
Richtig. Oder "1025"wenn Sie Mailcatcher verwenden.
Etienne