So senden Sie E-Mails mit Action Mailer und SendGrid in Rails 5

Dieser Artikel befasst sich mit dem Senden von E-Mails in der Produktion und setzt voraus, dass Sie zuvor mit ActionMailer gearbeitet haben. Wenn Sie einen vollständigen Artikel zur Verwendung von ActionMailer für die Entwicklung wünschen, lassen Sie es mich in den Kommentaren wissen!

Was ist ActionMailer?

ActionMailer ist ein zentraler Bestandteil von Rails. Dies ist die einfachste Möglichkeit, E-Mails über Ihre Rails-Anwendung (RIP ar_mailer) zu senden. Stellen Sie sich das als separate Gruppe von Controllern und Ansichten vor, die anstelle der Darstellung von HTML auf einer Seite über eine HTTP-Anforderung eine E-Mail-Vorlage rendern, die über SMTP an eine E-Mail-Adresse gesendet wird.

Warum SendGrid?

Ich mag SendGrid, weil Sie sich im Gegensatz zu PostMark oder vielen anderen ähnlichen Diensten mit einem regulären Google Mail-E-Mail-Konto anmelden können. Es ist nicht erforderlich, dass Sie bereits eine Domain mit einer E-Mail-Adresse haben. Dies ist hilfreich, wenn Sie noch testen, noch keine MX-Server eingerichtet haben oder einen Drittanbieter-Service wie Heroku verwenden.

Ich finde es auch gut, dass Sie mit SendGrid keine komplizierten Edelsteine ​​oder Heroku-Add-Ons installieren. Es verwendet SMTP als Sendeprotokoll und funktioniert einfach.

für SendGrid. (nicht gesponsert)

So senden Sie E-Mails mit SendGrid in der Produktion

Schritt 1: Melden Sie sich für das SendGrid-Konto an

Erstellen Sie ein Konto in SendGrid. Sie können bis zu 100 E-Mails pro Tag kostenlos versenden. 100.000 E-Mails pro Monat kosten nur 14,95 US-Dollar. Nicht so schlecht!

Schritt 2: Richten Sie Ihre Rails 5-Produktionsumgebung ein

Der erste Schritt ist das Festlegen der Versandmethode in Ihrer Rails-App als SMTP. Dadurch wird sichergestellt, dass E-Mails tatsächlich an die Produktion gesendet werden. Der zweite Schritt besteht darin, die Standard-URL Ihrer Anwendung anzugeben. Andernfalls funktionieren keine Links zu der Site, die Sie in Ihre E-Mails einfügen.

# config / surroundings / production.rb
config.action_mailer.delivery_method =: smtp
config.action_mailer.default_url_options = {host: "http: // TODO_PUT_YOUR_DOMAIN_HERE"}

Schritt 3. Fügen Sie Ihre E-Mail-Anmeldeinformationen in eine SMTP-Initialisierungsdatei ein.

Dieser Schritt ist wichtig. NICHT, ich wiederhole, NICHT, lassen Sie Ihre Anmeldeinformationen in Ihrer Rails-Anwendung offen. Schützen Sie sie mit einem Juwel wie Dot-Env-Rails, denn wenn Sie dies nicht tun und Ihre Anmeldeinformationen GitHub preisgeben, können schlimme Dinge passieren (wahre Geschichte: Ich habe jetzt jemanden, der gegen eine Gebühr von 10.000 USD kämpfen musste, nachdem er seine AWS S3-Anmeldeinformationen auf GitHub hinterlassen hat). .

Der SMTP-Initialisierer enthält die Adresse und den Port, über die eine Verbindung zu SendGrid hergestellt wird, sowie Ihre Anmeldeinformationen. Es gibt zwei Möglichkeiten, eine Verbindung zu SendGrid herzustellen. Die einfache Möglichkeit besteht darin, nur Ihren Benutzernamen und Ihr Kennwort einzugeben. Sie können jedoch auch einen SendGrid-API-Schlüssel erstellen und die Anmeldeinformationen stattdessen mit dem Schlüssel festlegen. (Danke an Kevin Berthier für das Code-Snippet!)

Erstellen Sie die Datei smtp.rb im Ordner "Initializers", falls sie noch nicht vorhanden ist.

# config / initializers / smtp.rb
ActionMailer :: Base.smtp_settings = {
  Adresse: 'smtp.sendgrid.net',
  Port: 587,
  domain: 'yourdomain.com',
  Benutzername: ENV ['SENDGRID_USERNAME'],
  Passwort: ENV ['SENDGRID_PASSWORD'],
  Authentifizierung:: Login,
  enable_starttls_auto: true
}
#wenn Sie den API-Schlüssel verwenden
ActionMailer :: Base.smtp_settings = {
  Domain: "YOUR_DOMAIN.COM",
  Adresse: "smtp.sendgrid.net",
  Port: 587,
  Authentifizierung:: plain,
  Benutzername: 'apikey',
  Passwort: ENV ['SENDGRID_API_KEY']
}

Wenn Sie das Juwel "dot-env rails" verwenden, müssen Sie Ihre Anmeldeinformationen zur Umgebungsdatei hinzufügen.

# .env
SENDGRID_USERNAME = Ihr_Benutzer
SENDGRID_PASSWORD = Ihr_Kennwort
SENDGRID_API_KEY = your_key

Schritt 4. Senden Sie Ihre Anmeldeinformationen an Ihre Produktionsumgebung.

Wenn Sie Heroku für die Bereitstellung verwenden, vergessen Sie nicht, die Anmeldeinformationen in Ihrem Terminal festzulegen, damit sie in Ihrer Produktionsumgebung angezeigt werden

heroku config: SENDGRID_USERNAME holen
heroku config: bekomme SENDGRID_PASSWORD

Schritt 5. Jetzt können Sie E-Mails senden!

Schreiben Sie diese erste E-Mail und schauen Sie zu, wie SendGrid den Rest erledigt.