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
Instalação do Sidekiq:
Primeiro, adicionamos a gem sidekiq ao nosso Gemfile e configuramos o Redis como nosso backend para o Sidekiq.Configuração do Mailer:
Configuramos o ActionMailer para usar SMTP com MailCatcher, uma ferramenta para visualizar emails enviados em ambiente de desenvolvimento.Criação do Job:
Implementamos um job de background que envia o email usando o Sidekiq.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 seuGemfile
e executebundle install
.
Configure o Sidekiq e Redis em config/application.rb
:
config.active_job.queue_adapter = :sidekiq
- 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
}
- 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
- 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
- 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>
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
Top comments (0)