Action Mailer로 메일 보내기 기능 만들기

13307 단어 RubyRails

개요


Action Mailer를 사용한 메일 발송 기능
이번 관리자의 사용자 질문에 관리자 화면에서 회답한 후
사용자에게 메일을 보내는 기능을 실현할 것이다.
학습 노트로

참고 자료


(1) RAILS GUIDES: Action Mailer의 기초
(2) [Rubbyon Rails] 메일로 보내는 설치 절차(Action Mailer)와 끼워 넣는 오류 등
(3) Rails로 메일 자동 발송 기능 만들기
(4) Rails의 Action Mailer를 통한 메일 처리
(5) Rails의 Action Mailer를 통해 메시지 보내기

Action Mailer란


Ruby on Rails에 메일 보내기 기능을 안내합니다.
Action Mailer를 사용하면 Rubi on Rails에서 메일
• 메일 잡지 동시 발송
• 사이트 회원 가입 시 thank you 메일
· 상담서 작성 내용도 관리자에게 우편으로 발송
앱에서 메일을 보내는 기능.
이것은 편리한 기능으로 응용 프로그램의 제조사 클래스나 보기에서 메일을 보낼 수 있습니다!

가져오기 단계


1. 뮬러 생성


rails 명령rails generate을 통해 생성됩니다.연락처는 임의의 이름이다.
이번에는 상담 관련 메일 발송 기능을 만들기 위해 연락하는 사람입니다.
terminal.낳다
$ rails generate mailer ContactMailer

terminal.결실
Running via Spring preloader in process 1893
   create  app/mailers/contact_mailer.rb
   invoke  erb
   create    app/views/contact_mailer
   invoke  rspec
   create    spec/mailers/contact_mailer_spec.rb
   create    spec/mailers/previews/contact_mailer_preview.rb
순조롭게 생성됐네요

2. 서버 설정


메일을 보낼 때 보내는 서버입니다.즉config/environments/development.rb에서 메일 발송 설정을 기술합니다.
이번에는 gmail의 기재 방법을 사용합니다.
development.rb
Rails.application.configure do
  #--- 中略 ---#
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    port:                 587,
    address:              'smtp.gmail.com',
    domain:               'gmail.com',
    user_name:            '<YOUR EMAIL ADDRESS>',
    password:             '<YOUR EMAIL PASSWORD>',
    authentication:       'login',
    enable_starttls_auto: true
  }
end
port:도 상기 수량을 유지할 수 있다.
위에서부터 차례대로 보다.
여기에는 매개변수config.action_mailer에 대한 다양한 옵션이 지정되어 있습니다.
1행raise_delivery_errors메일 발송 실패 시 오류 여부 (보내고 싶어서 정말)
행 2delivery_method우편물의 발송 방법.기본값:smtd이니까 신경 쓸 필요 없어요.
나처럼 "이게 뭐야!?"여러분은 아래의 인용을 읽어 주십시오.
'SMTP'는'심플 메일 트랜스퍼 프로토콜'(Simple Mail Transfer Protocol·새 메일 전송 프로토콜)의 약칭으로, 억지로 번역하려면'간단한 메일 발송 절차'죠.약속이라고 볼 수도 있고.
당신은 메일을 쓰고 수신자의 주소를 입력하며 "발송"아이콘을 눌러라.이때 당신의 스마트폰과 컴퓨터>는 이'SMTP'의 약속에 따라 당신과 계약한 메일 서버와 이런 대화를 나눈다.
"내가 메일 보낼게~""네!""수취인은 모모""양""정문은 이렇게 쓸 수밖에 없어요""받으세요!"이런 상황입니다.
출전: 메일을 통해 가장 먼저 좌절된'SMTP''POP''IMAP'를 설정합니다.그 의미 & 설정 방법은?
3행smtp_settingssmtp의 상세한 설정인 것 같아요.
  • port = SMTP 서버의 포트 번호
  • address=>SMTP 서버의 호스트 이름
  • domain=>HELO 도메인
  • user_메일을 보내는 gmail 계정
  • password=>메일로 보내는 gmail의 비밀번호
  • authhentication=>인증 방법
  • enable_starttls_auto=> 메시지를 보낼 때 TLS 인증 사용 여부
  • 3. 메일 편집


    메일이 Rails 컨트롤러랑 비슷하네요.
    보기를 사용하여 메시지 내용을 만들 수 있는'Action'이라는 방법이 있습니다.
    생성 후 즉시 아래 응용 프로그램 목록입니다mailer.함께
    app/mailer/application_mailer.rb
    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
    
    빈 우편물
    app/mailer/contact_mailer.rb
    class ContactMailer < ApplicationMailer
    end
    
    있을 거야.application_mailersample_mailer에 각 공장의 설치를 설치했다.

    application_메일 편집


    app/mailer/contact_mailer.rb
    class ApplicationMailer < ActionMailer::Base
      default from:    "管理人 <[email protected]>",
      layout 'mailer'
    end
    
    일반적인 처리, 설정을 설명할 때 사용합니다defaultメソッド.
    등록 정보
    과업
    to
    목표 지정
    cc
    통합 전송 대상 지정
    bcc
    숨겨진 전송 대상 지정
    from
    메일 소스 이름
    subject
    메일 제목
    date
    메일 발송 시간
    reply_to
    답장 주소 지정
    잠깐만요.

    contact_mailer.편집


    이번 관리자의 답장은 사용자의 이메일로 보낼 것이다.
    따라서 방법을 send_when_admin_reply로 정의한다.
    app/mailer/contact_mailer.rb
    class ContactMailer < ApplicationMailer
    
      def send_when_admin_reply(user, contact) #メソッドに対して引数を設定
        @user = user #ユーザー情報
        @answer = contact.reply_text #返信内容
        mail to: user.email, subject: '【サイト名】 お問い合わせありがとうございます'
      end
    
    end
    
    
    개별 설정 사용mailメソッド.
    호출send_when_replyedメソッド시 전달된 사용자 정보에서
    이메일 주소만 메일의 발송 목적지로 꺼냅니다.mailメソッド 호출 후 메일의 본문이 기재된 보기를 읽습니다.
    실례 변수@xxx로 메일 보기에 값을 주고 싶어서 실례 변수를 준비한 것 같아요.
    이어서 나는 그 메일의 본문을 쓸 것이다

    4. 메일 본문 만들기 (메일 보기 만들기)

    app/views/contact_mailerディレクトリ 아래에 두 개의 파일을 만듭니다.
    하나는 HTML 형식이고 다른 하나는 텍스트 메시지입니다.
    HTML 형식의 메일을 받지 못하는 고객도 있고/받지 않으려는 사람도 있으니 미리 텍스트 메일을 쓰는 것이 좋다.

    HTML 파일 만들기


    views/contact_mailer/send_when_admin_reply.html.erb
    
      <h2><%= @user.name %> 様</h2>
     <p>この度は、お問い合わせありがとうございました。<br>
     以下でご質問の回答となっておりますでしょうか。</p>
    
      <p><%= @answer %></p>
    
      <p>今後とも XXX をよろしくお願いいたします。</p>
    
    

    텍스트 파일 만들기


    views/contact_mailer/send_when_admin_replyd.text.erb
    
      ===============================
      <%= @user.name %> 様
      ===============================
    
      この度は、お問い合わせありがとうございました。
     以下でご質問の回答となっておりますでしょうか。
    
      <%= @answer %>
    
      今後とも XXX をよろしくお願いいたします。
    
    

    5. 실제 실행 중인 동작을 메일 발송 처리하기


    메일 설정만 써서 메일을 보낼 수 없습니다.
    메일 (여기 application_mailer.rb/contact_mailer.rb 은 각 컨트롤러의 동작을 통해 시작합니다.
    관리자는 프로그램 관리 화면 폼을 통해 답장을 보내고 그 내용을 메일로 사용자에게 보낸다.
    실제 처리하는 동작은 admin/contacts_controller.rb이다.
    app/controllers/contacts_controller.rb
    
    class Admin::ContactsController < Admin::ApplicationController
      def update
       contact = Contact.find(params[:id]) #contact_mailer.rbの引数を指定
       contact.update(contact_params)
       user = contact.user
       ContactMailer.send_when_admin_reply(user, contact).deliver
      end
    end
    
    
    예를 들어 사용자가 새 계정을 등록하고 메일을 보낼 때
    app/controllers/users_controller.rb
    class UsersController < ApplicationController
      before_action :set_user
    
      def create
        if @user.save #ユーザーのインスタンスが新しく生成されて保存されたら
          NotificationMailer.send_when_signup(@user).deliver #確認メールを送信
          redirect_to @user
        else
          render 'new'
        end
      end
    end
    
    create 동작을 처리합니다.
    내 애플리케이션에서 DB 설계에서
    사용자가 문의할 때 연락표에서
    기록을 하나 준비했는데, 그중에 답장 한 열이 준비되었다.
    따라서 업데이트 동작을 사용하십시오
    기존 기록에서 관리자가 회신한 데이터만 업데이트

    6. 테스트해보기


    이상으로 메일을 할 수 있을 거예요·!
    실제로 프로그램을 실행해 보았는데 메일을 받을 수 있다면 성공했다
    이상 학습노트

    좋은 웹페이지 즐겨찾기