Action Mailer if 경로
이거 뭐야?
며칠 전 라일스가 개발한 서비스에 사용된 메일 발송용gem이 2년 동안 업데이트되지 않아 메일 발송 서비스(Send Grid) 측 일부 기능을 사용할 수 없어 다른 gem로 바꿨다.
바뀐gem은 SendGrid가 공식적으로 발표한 gemsendgrid-ruby이 아니라 ActionMailer가 메일로 요청을 보내려는 gemsendgrid-actionmailer(내부적으로sendgrid-ruby 사용)
하지만 원래 Action Mailer는 내부에서 메일이gem를 사용했고 전송 방법은pluggable이다.
따라서sendgrid-ruby로delivery method를 독자적인 편지 조립 방법으로 변경하고 싶습니다.
컨디션
・ruby2.6.5
・rails 5.0.7
・sendgrid-ruby6.3.7
· 우편물 2.6.6
API Key 생성
측면 메뉴의 Setting API Keys에서 마이그레이션하고 Create API Key 버튼을 클릭하면 API Key를 만들 수 있는 권한이 있습니다.
gem 추가
Gemfile
gem 'sendgrid-ruby'
delivery_method의 변경 사항
app/mailers/send_grid_mail.rb
class SendGridMail
def initialize(settings)
@settings = settings
end
def deliver!(mail)
personalization = SendGrid::Personalization.new
personalization.add_to(SendGrid::Email.new(email: mail.to.first))
personalization.subject = mail.subject
send_grid_mail = SendGrid::Mail.new
send_grid_mail.from = SendGrid::Email.new(email: mail.from.first)
send_grid_mail.subject = mail.subject
send_grid_mail.add_content(SendGrid::Content.new(type: 'text/html', value: mail.body.raw_source))
send_grid_mail.add_personalization(personalization)
send_grid = SendGrid::API.new(api_key: @settings[:api_key])
begin
response = send_grid.client.mail._('send').post(request_body: send_grid_mail.to_json)
rescue Exception => e
# Sentryへ通知
Raven.capture_exception(e)
end
end
end
config/environments/development.rb ActionMailer::Base.add_delivery_method :sendgrid, SendGridMail
config.action_mailer.delivery_method = :sendgrid
config.action_mailer.sendgrid_settings = {
api_key: ENV['SENDGRID_API_KEY_FOR_SEND_MAIL']
}
시용하다
app/mailers/test_mailer.rb
class TestMailer < ApplicationMailer
def send_mail(to='[email protected]', from='[email protected]', subject='件名:テストメール', body='はじめてのメール')
@body = body
@title = subject
mail(to: to, from: from, subject: subject)
end
end
app/views/test_mailer/send_mail.html.erb<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><%= @title %></title>
</head>
<body>
<%= raw @body %>
</body>
</html>
최후
iCARETech Blog도 매달 투고하기 때문에 꼭 보세요!
그리고 Meet Up도 개최하고 있으니 관심 있는 분들은 언제든지 참가해 주세요!
Reference
이 문제에 관하여(Action Mailer if 경로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kou_row_line/articles/0e3e575f90980c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)