Rails5.2에서 SendGrid 사용

6002 단어 SendGridRailsRails5
Rails 5.2에서 다양한 시도 이라는 기사의 계속으로, 메일 송신 기능을 구현합니다.



먼저 rails 명령으로 메일러를 만듭니다.
rails g mailer Notifications greet
:(省略)

greet이라는 메소드와 템플릿(text와 html)이 생성되고 있습니다. 이번에는 대상 주소만 인수로 받아들이도록 수정했습니다(그 외는 그대로).

app/mailers/notifications_mailer.rb
  def greet(to)
    @greeting = "Hi"

    mail to: to
  end

메일 제출 양식(mail1)과 제출 완료 페이지(mail2)를 작성합니다.

config/routes.rb
  get '/mail1', to: 'pages#mail1'
  post '/mail2', to: 'pages#mail2'

컨트롤러의 구현은 다음과 같습니다. 앞서 정의한 greet 메소드에 메일의 송신처를 건네주고 그대로 전달하고 있습니다.

app/controllers/pages_controller.rb
  def mail1
  end

  def mail2
    @to = params[:to]
    NotificationsMailer.greet(@to).deliver_later
  end

해당 뷰는 다음과 같습니다.

app/views/pages/mail1.html.erb
<%= form_tag mail2_path do %>
  <% if flash[:error].present? %>
    <div id="error_explanation">
      <p><%= flash[:error] %></p>
    </div>
  <% end %>
    To:
    <%= text_field_tag :to, "", {placeholder: "[email protected]" ,size: 60} %>
    <%= submit_tag 'Send email' %>
<% end %>

app/views/pages/mail2.html.erb
<p>Message was sent to <%= @to %></p>
<p><%= link_to 'Back', mail1_path %></p>

로컬의 개발 환경(development)에서는 실제로 메일은 송신되지 않고, 로그에 송신되는 메일이 출력되기 때문에, 지금까지의 설정으로 테스트가 가능할 것입니다. 그런 다음 production 환경에 SendGrid를 설정합니다. SendGrid의 대시보드에서 개인 키를 가져옵니다.

config/environments/production.rb
  ActionMailer::Base.smtp_settings = {
    :user_name => 'apikey',
    :password => Rails.application.credentials.sendgrid_secret_key,
    :domain => 'wiki.lmlab.net',
    :address => 'smtp.sendgrid.net',
    :port => 2525,
    :authentication => :plain,
    :enable_starttls_auto => true
  }
sendgrid_secret_key는 다음 명령을 사용하여 credentials.yml을 열고 씁니다. .
EDITOR=vim rails credentials:edit

좋은 웹페이지 즐겨찾기