동적 SendGrid 이메일 템플릿을 사용하여 Ruby on Rails용 SendGrid SDK를 사용하여 이메일 보내기
이 기사에서는 Ruby on Rails에서 SendGrid SDK를 사용하여 SendGrid의 동적 템플릿을 포함하고 이메일에 첨부 파일을 포함하여 이메일을 보내는 방법에 대해 자세히 설명합니다.
Rails에 SendGrid SDK 추가
Gemfile에서 공식 SendGrid gem을 추가합니다.
gem 'sendgrid-ruby', '~> 6.6', '>= 6.6.2'
그리고
bundle install
를 실행합니다.SendGrid용 동적 템플릿
SendGrid의 더 강력한 기능은 동적 템플릿을 추가하는 기능이라고 생각합니다. 비주얼 빌더 또는 HTML을 사용하여 템플릿을 만들 수 있습니다. 두 경우 모두 멋진 템플릿을 쉽게 만들 수 있도록 멋진 반응형 이메일 미리보기를 제공합니다.
이러한 템플릿은 대체 옵션도 제공합니다. 예를 들어 트랜잭션 이메일을 작성하고 수신자의 이름은 해당 이메일을 보내는 사람에 따라 다릅니다. 그래서
{{name}}
와 같이 템플릿에 변수를 언급하고 SDK를 통해 이메일을 보낼 때 아래와 같이 대체 값에 대한 JSON 객체를 보냅니다.{
"name": "Sulman Baig"
}
템플릿 생성을 완료하면
template_id
가 표시됩니다. 나중에 사용할 수 있도록 해당 ID를 저장하십시오.SendGrid의 API 키 받기:
공식 문서에 언급된 단계에 따라 SendGrid의 API 키를 얻을 수 있습니다. https://docs.sendgrid.com/ui/account-and-settings/api-keys#creating-an-api-key
이메일 작업:
이제
template_id
및 API Key
가 있으므로 동적 템플릿과 첨부 파일을 사용하여 데이터베이스의 사용자에게 이메일을 보내는 이메일 작업을 생성해 보겠습니다.아래 코드 스니펫을 가정합니다.
EXPORT_TEMPLATE
ENV에 생성한 템플릿 ID가 포함됨SENDGRID_API_KEY
ENV에는 SendGrid의 API 키가 포함되어 있습니다. @tempfile
는 첨부 파일로 보내기 위해 로컬에 저장된 파일입니다. user_id
는 name
및 email
와 같은 속성으로 데이터베이스에 저장된 사용자입니다. 이제 파일
app/jobs/email_job.rb
을 만들고 다음 코드를 추가합니다.You can include the sidekiq gem and call this job asynchronously.
# frozen_string_literal: true
require 'sendgrid-ruby'
#### Example Call
# EmailJob.new.perform(
# @user.id,
# { name: @user.name },
# ENV.fetch('EXPORT_TEMPLATE', nil),
# [
# {
# file: @tempfile.path,
# type: 'application/csv',
# name: @tempfile.path.split('/').last,
# content_id: 'export_file'
# }
# ]
# )
# This is the email job that will be sent to the user
class EmailJob
include SendGrid
# From Email and Name
NOREPLY_FROM_EMAIL = '[email protected]'
NOREPLY_FROM_NAME = 'All Wallet'
# include sidekiq to call perform as perform_async
def perform(user_id, subsitutions, template_id, attachments = nil) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
# initialize sendgrid api
sg = SendGrid::API.new(api_key: ENV.fetch('SENDGRID_API_KEY', nil))
# we will get to_email from user object saved in db
user = User.kept.find_by(id: user_id)
return unless user
# initialize mail object of sendgrid
mail = Mail.new
# fill 'from' data from the constants mentioned above
mail.from = Email.new(email: NOREPLY_FROM_EMAIL, name: NOREPLY_FROM_NAME)
# personalization is object for email to data and templates
personalization = Personalization.new
# add user data to which email to be sent
personalization.add_to(Email.new(email: user.email, name: user.name))
# add substitutions to template created in sendgrid to replace the variable in template like `{{name}}`
# {
# "name": "Sulman Baig"
# }
personalization.add_dynamic_template_data(subsitutions)
mail.add_personalization(personalization)
mail.template_id = template_id
# If attachments are sent as arguments
if attachments.present? && attachments.is_a?(Array) && attachments.size.positive?
attachments.each do |attachment_input|
attachment = Attachment.new
# attachment has to be sent as base64 encoded string
attachment.content = Base64.strict_encode64(File.read(attachment_input[:file])) # file: path of file saved in local or remote
attachment.type = attachment_input[:type] # type of file e.g. application/csv
attachment.filename = attachment_input[:name] # filename
attachment.disposition = 'attachment'
attachment.content_id = attachment_input[:content_id] # e.g. export_file
mail.add_attachment(attachment)
end
end
begin
# Send Email
sg.client.mail._('send').post(request_body: mail.to_json)
rescue StandardError => e
# TODO: capture exception
end
end
end
GitHub Gist
위 작업에 대한 예제 호출은 다음과 같습니다.
EmailJob.new.perform(
@user.id,
{ name: @user.name },
ENV.fetch('EXPORT_TEMPLATE', nil),
[
{
file: @tempfile.path,
type: 'application/csv',
name: @tempfile.path.split('/').last,
content_id: 'export_file'
}
]
)
행복한 코딩!
Reference
이 문제에 관하여(동적 SendGrid 이메일 템플릿을 사용하여 Ruby on Rails용 SendGrid SDK를 사용하여 이메일 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sulmanweb/send-emails-using-sendgrid-sdk-for-ruby-on-rails-using-dynamic-sendgrid-email-templates-4jcf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)