DEV Community

Cover image for Criando um Sistema de Envio de Emails com Rails e Sidekiq: Um Guia Prático
Fernanda
Fernanda

Posted on

1 1

Criando um Sistema de Envio de Emails com Rails e Sidekiq: Um Guia Prático

Introdução
Neste artigo, vou mostrar como criar um sistema de envio de emails em uma aplicação Ruby on Rails utilizando Sidekiq para processamento de background jobs. Vou detalhar o processo passo a passo, desde a configuração inicial até a implementação e testes. Também discutirei possíveis casos de uso para este sistema.

Objetivos do Projeto
Nosso objetivo é construir uma funcionalidade que permita ao usuário enviar emails a partir da nossa aplicação Rails. Utilizaremos Sidekiq para processar o envio de emails em segundo plano e Letter Opener ou MailCatcher para visualizar os emails enviados durante o desenvolvimento.

Repositório: github

Configuração do Ambiente

  1. Instalação do Sidekiq:
    Primeiro, adicionamos a gem sidekiq ao nosso Gemfile e configuramos o Redis como nosso backend para o Sidekiq.

  2. Configuração do Mailer:
    Configuramos o ActionMailer para usar SMTP com MailCatcher, uma ferramenta para visualizar emails enviados em ambiente de desenvolvimento.

  3. Criação do Job:
    Implementamos um job de background que envia o email usando o Sidekiq.

  4. Criação do Formulário de Envio:
    Implementamos um formulário simples para enviar emails.

Passos Detalhados

  • Instalação e Configuração do Sidekiq Adicione a gem sidekiq ao seu Gemfile e execute bundle install.

Configure o Sidekiq e Redis em config/application.rb:

config.active_job.queue_adapter = :sidekiq
Enter fullscreen mode Exit fullscreen mode
  • Configuração do Mailer No config/environments/development.rb, configure o ActionMailer para usar MailCatcher:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: 'localhost',
  port: 1025
}
Enter fullscreen mode Exit fullscreen mode
  • Criando o Job Crie um job para enviar o email:
class SendReportJob < ApplicationJob
  queue_as :default

  def perform(user, subject, body)
    ReportMailer.send_report(user, subject, body).deliver_now
  end
end
Enter fullscreen mode Exit fullscreen mode
  • Implementação do Mailer Crie um mailer para enviar o email:
class ReportMailer < ApplicationMailer
  def send_report(user, subject, body)
    @user = user
    @body = body

    mail(
      to: @user.email,
      subject: subject
    ) do |format|
      format.text { render plain: @body }
    end
  end
end

Enter fullscreen mode Exit fullscreen mode
  • Criando o Formulário No arquivo app/views/emails/new.html.erb, adicione o formulário para enviar o email:
<div class="container mt-5">
  <h1 class="mb-4">Enviar E-mail</h1>
  <div class="form-group">

  <%= form_with url: send_email_path, local: true, class: "needs-validation" do |form| %>
    <div class="mb-3">
      <%= form.label :user_id, "Selecione um usuário:", class: "form-label" %>
      <%= form.collection_select :user_id, User.all, :id, :name, { prompt: "Escolha um usuário" }, { class: "form-select" } %>
    </div>

    <div class="mb-3">
      <%= form.label :subject, "Assunto:", class: "form-label" %>
      <%= form.text_field :subject, class: "form-control", placeholder: "Digite o assunto" %>
    </div>

    <div class="mb-3">
      <%= form.label :body, "Corpo do e-mail:", class: "form-label" %>
      <%= form.text_area :body, rows: 10, class: "form-control", placeholder: "Escreva a mensagem do e-mail" %>
    </div>

    <div class="mb-3">
      <%= form.submit "Enviar E-mail", class: "btn btn-primary" %>
    </div>
  <% end %>

  <% if notice %>
    <div class="alert alert-<%= notice['class'] %> mt-4"><%= notice['message'] %></div>
  <% end %>
</div>

  <%= link_to "Add user", new_user_path, class: "btn btn-secondary mt-3" %>
</div>

Enter fullscreen mode Exit fullscreen mode

Casos de Uso
Envio de Relatórios Periódicos: Enviar relatórios de desempenho ou de vendas para os usuários em horários programados.
Notificações de Sistema: Enviar notificações importantes sobre o sistema ou atualizações para os usuários.
Recuperação de Senha: Enviar emails para recuperação de senha e outros processos de autenticação.
Conclusão
Neste artigo, cobrimos como criar um sistema de envio de emails em Rails usando Sidekiq para processamento assíncrono. Implementamos a configuração necessária, criamos um job para enviar emails, e testamos a funcionalidade usando ferramentas como MailCatcher. Agora, você pode expandir esse sistema para atender a diferentes necessidades da sua aplicação.

Referências
Documentação do Sidekiq

Documentação do ActionMailer

MailCatcher

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay