Ruby on Rails - wysyłanie e-maili

Action Mailerto komponent Rails, który umożliwia aplikacjom wysyłanie i odbieranie wiadomości e-mail. W tym rozdziale zobaczymy, jak wysłać wiadomość e-mail za pomocą Railsów. Zacznijmy tworzyćemails projekt za pomocą następującego polecenia.

tp> rails new mailtest

Stworzy to ramy wymagane do kontynuowania. Teraz zaczniemy od konfiguracji ActionMailera.

Action Mailer - Konfiguracja

Poniżej przedstawiono kroki, które należy wykonać, aby zakończyć konfigurację przed przystąpieniem do właściwej pracy -

Przejdź do folderu config projektu wiadomości e-mail i otwórz plik environment.rb i dodaj następujący wiersz na dole tego pliku.

config.action_mailer.delivery_method = :smtp

Informuje ActionMailer, że chcesz używać serwera SMTP. Możesz również ustawić go na: sendmail, jeśli używasz systemu operacyjnego opartego na Uniksie, takiego jak Mac OS X lub Linux.

Dodaj następujące wiersze kodu również u dołu pliku environment.rb.

config.action_mailer.smtp_settings = {
   address:              'smtp.gmail.com',
   port:                 587,
   domain:               'example.com',
   user_name:            '<username>',
   password:             '<password>',
   authentication:       'plain',
   enable_starttls_auto: true  
}

Zastąp każdą wartość skrótu właściwymi ustawieniami dla serwera Simple Mail Transfer Protocol (SMTP). Możesz uzyskać te informacje od swojego dostawcy usług internetowych, jeśli jeszcze nie wiesz. Nie musisz zmieniać numeru portu 25 i typu uwierzytelniania, jeśli używasz standardowego serwera SMTP.

Możesz także zmienić domyślny format wiadomości e-mail. Jeśli wolisz wysyłać wiadomości e-mail w formacie HTML zamiast zwykłego tekstu, dodaj również następujący wiersz do pliku config / environment.rb -

ActionMailer::Base.default_content_type = "text/html"

ActionMailer :: Base.default_content_type można ustawić na „tekst / zwykły”, „tekst / html” i „tekst / wzbogacony”. Wartość domyślna to „tekst / zwykły”.

Następnym krokiem będzie utworzenie mailera

Wygeneruj Mailer

Użyj następującego polecenia, aby wygenerować pocztę w następujący sposób -

tp> cd emails
emails> rails generate mailer Usermailer

Spowoduje to utworzenie pliku user_mailer.rb w katalogu app \ mailer. Sprawdź zawartość tego pliku w następujący sposób -

class Emailer < ActionMailer::Base
end

Utwórzmy jedną metodę w następujący sposób -

class UserMailer < ApplicationMailer
   default from: '[email protected]'
   
   def welcome_email(user)
      @user = user
      @url  = 'http://www.gmail.com'
      mail(to: @user.email, subject: 'Welcome to My Awesome Site')
   end
   
end
  • default Hash- To jest skrót wartości domyślnych dla każdego e-maila wysyłanego z tej poczty. W tym przypadku ustawiamy: from z nagłówka na wartość dla wszystkich wiadomości w tej klasie. Można to zmienić na podstawie wiadomości e-mail

  • mail - Właściwa wiadomość e-mail, w której przekazujemy nagłówki: do i:.

Utwórz plik o nazwie welcome_email.html.erb w app / views / user_mailer /. Będzie to szablon używany do wiadomości e-mail, sformatowany w HTML -

<html>
   
   <head>
      <meta content = 'text/html; charset = UTF-8' http-equiv = 'Content-Type' />
   </head>
   
   <body>
      <h1>Welcome to example.com, <%= @user.name %></h1>
      
      <p>
         You have successfully signed up to example.com,your username is: 
         <%= @user.login %>.<br>
      </p>
      
      <p>
         To login to the site, just follow this link: 
         <%= @url %>.
      </p>
      
      <p>Thanks for joining and have a great day!</p>
      
   </body>
</html>

Następnie utworzymy część tekstową dla tej aplikacji w następujący sposób -

Welcome to example.com, <%= @user.name %>
===============================================
 
You have successfully signed up to example.com,
your username is: <%= @user.login %>.
 
To login to the site, just follow this link: <%= @url %>.
 
Thanks for joining and have a great day!

Dzwonię do kuriera

Najpierw utwórzmy proste szkielet użytkownika

$ bin/rails generate scaffold user name email login
$ bin/rake db:migrate

Action Mailer jest ładnie zintegrowany z Active Job, dzięki czemu możesz wysyłać e-maile poza cyklem żądanie-odpowiedź, więc użytkownik nie musi na to czekać -

class UsersController < ApplicationController
   # POST /users
   # POST /users.json
   def create
   @user = User.new(params[:user])
   
      respond_to do |format|
         if @user.save
            # Tell the UserMailer to send a welcome email after save
            UserMailer.welcome_email(@user).deliver_later
            
            format.html { redirect_to(@user, notice: 'User was successfully created.') }
            format.json { render json: @user, status: :created, location: @user }
         else
            format.html { render action: 'new' }
            format.json { render json: @user.errors, status: :unprocessable_entity }
         end
         
      end
      
   end
end

Teraz przetestuj swoją aplikację, używając adresu http://127.0.0.1:3000/users/new. Wyświetla następujący ekran i korzystając z tego ekranu, będziesz mógł wysłać wiadomość do kogokolwiek.

Spowoduje to wysłanie wiadomości i wyświetlenie wiadomości tekstowej „Wiadomość wysłana pomyślnie” i wyświetlenie w następujący sposób -

sent mail to [email protected] (2023.Sms)
[ActiveJob] [ActionMailler::DeliveryJob] [2cfde3c-260e-4a33-1a6ada13a9b] Date: Thu, 09 Jul 2015 11:44:05 +0530
From: [email protected]
To: [email protected]
Message-Id: <[email protected]>
Subject: Welcome to My Awesome Site
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--mimepart_559e112d601c8_f1031e7f20233f5";
charset=UTF-8
Content-Transfer-Encoding:7bit

Aby uzyskać więcej informacji na temat wysyłania wiadomości e-mail za pomocą Rails, przejdź do ActionMailer .