Ruby on Rails - enviar e-mails

Action Maileré o componente Rails que permite aos aplicativos enviar e receber emails. Neste capítulo, veremos como enviar um e-mail usando Rails. Vamos começar a criar umemails projeto usando o seguinte comando.

tp> rails new mailtest

Isso criará a estrutura necessária para prosseguir. Agora, começaremos com a configuração do ActionMailer.

Action Mailer - Configuração

A seguir estão as etapas que você deve seguir para concluir a configuração antes de prosseguir com o trabalho real -

Vá para a pasta de configuração do seu projeto de emails e abra o arquivo environment.rb e adicione a seguinte linha na parte inferior deste arquivo.

config.action_mailer.delivery_method = :smtp

Ele informa ao ActionMailer que você deseja usar o servidor SMTP. Você também pode defini-lo como: sendmail se estiver usando um sistema operacional baseado em Unix, como Mac OS X ou Linux.

Adicione as seguintes linhas de código na parte inferior do seu environment.rb também.

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  
}

Substitua cada valor de hash pelas configurações adequadas para o servidor Simple Mail Transfer Protocol (SMTP). Você pode obter essas informações com seu provedor de serviços de Internet, se ainda não souber. Você não precisa alterar o número da porta 25 e o tipo de autenticação se estiver usando um servidor SMTP padrão.

Você também pode alterar o formato padrão da mensagem de e-mail. Se você preferir enviar e-mail em HTML em vez do formato de texto simples, adicione a seguinte linha a config / environment.rb também -

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

ActionMailer :: Base.default_content_type pode ser definido como "texto / simples", "texto / html" e "texto / enriquecido". O valor padrão é "text / plain".

A próxima etapa será criar um mailer

Gerar um Mailer

Use o seguinte comando para gerar um mailer da seguinte maneira -

tp> cd emails
emails> rails generate mailer Usermailer

Isso criará um arquivo user_mailer.rb no diretório app \ mailer. Verifique o conteúdo deste arquivo da seguinte forma -

class Emailer < ActionMailer::Base
end

Vamos criar um método da seguinte maneira -

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- Este é um hash de valores padrão para qualquer e-mail que você enviar deste mailer. Neste caso, estamos configurando o cabeçalho: from para um valor para todas as mensagens nesta classe. Isso pode ser substituído por e-mail

  • mail - A mensagem de e-mail real, estamos passando os cabeçalhos: para e: assunto em.

Crie um arquivo chamado welcome_email.html.erb em app / views / user_mailer /. Este será o modelo usado para o e-mail, formatado em 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>

Em seguida, criaremos uma parte de texto para este aplicativo da seguinte forma -

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!

Ligando para o Mailer

Primeiro, vamos criar um scaffold de usuário simples

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

O Action Mailer está perfeitamente integrado ao Active Job para que você possa enviar e-mails fora do ciclo de solicitação-resposta, para que o usuário não precise esperar por isso -

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

Agora, teste seu aplicativo usando http://127.0.0.1:3000/users/new. Ele exibe a seguinte tela e usando esta tela, você poderá enviar sua mensagem para qualquer pessoa.

Isso enviará sua mensagem e exibirá a mensagem de texto "Mensagem enviada com sucesso" e o resultado será o seguinte -

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

Para mais informações sobre como enviar e-mails usando Rails, por favor, vá até ActionMailer .