컨설팅 테이블 작성

17901 단어 ActionMailerRails
이번에는 이런 상담 양식을 만들 거예요.
투고한 내용은 G-mail로 보낼 수 있다.

이쪽 사이트를 참고하게 해 주세요.
https://remonote.jp/rails-confirm-form
https://qiita.com/annaaida/items/81d8a3f1b7ae3b52dc2b
2020/4/18
환경 변수 설정은dotenv에서credentials까지입니다.yml.enc로 변경되었습니다.

STEP1


먼저 라우팅 및 컨트롤러 작성
config/routes.rb

 Rails.application.routes.draw do 
 get  'index' =>'messages#index' 
 post 'confirm' => 'messages#confirm'
 post 'done' => 'messages#done' 
 end 
단말기
$ rails g controller messages

STEP2


다음은 컨트롤러입니다.
발리에서 걸리거나 복귀 버튼을 눌렀다는 기록도 있다.
app/controllers/messages_controller.rb

class MessagesController < ApplicationController
  def index
    @message = Message.new
  end

  def confirm
    @message = Message.new(message_params)
    if @message.valid?
      render :action => 'confirm'
    else
      render :action => 'index'
    end
  end

  def done
    @message = Message.new(message_params)
    if params[:back]
      render :action => 'index'
    else
      MessageMailer.received_email(@message).deliver_now
      render :action => 'done'
    end
  end

  private
  def message_params
    params.require(:message).permit(:name, :email, :content)
  end
end

STEP3


이제 뷰 작성을 시작합니다.
투고 화면
app/views/messages/index.html.erb


<%= form_for(@message, url: { action: :confirm }) do |f| %>
  <div>
    <h2>お問い合わせ</h2>

      <% if @message.errors.present? %>
        <div>
          <strong>入力内容にエラーがあります</strong>
          <ul>
            <% @message.errors.each do |attr, error| %>
              <li><%= error %></li>
            <% end %>
          </ul>
        </div>
      <% end %>

    <div>
      <strong>名前</strong>
      <p><%= f.text_field :name, placeholder: '20文字以内' %></p>
    </div>
    <div>
      <strong>メールアドレス</strong>
      <p><%= f.text_field :email, placeholder: '30文字以内' %></p>
    </div>
    <div>
      <strong>内容</strong>
      <p><%= f.text_area :content, placeholder: '200文字以内' %></p>
    </div>
      <%= f.submit '確認画面へ' %>
  </div>
<% end %>
내용 확인 화면
app/views/messages/confirm.html.erb


<%= form_for @message, :url => done_path do |f| %>
  <div>
    <h2>内容確認</h2>
    <div>
      <strong>名前</strong>
      <p>
        <%= f.hidden_field :name %>
        <%= @message.name %>
      </p>
    </div>
    <div>
      <strong>メールアドレス</strong>
      <p>
        <%= f.hidden_field :email %>
        <%= @message.email %>
      </p>
    </div>
    <div>
      <strong>内容</strong>
      <p>
        <%= f.hidden_field :content %>
        <%= simple_format(@message.content) %>
      </p>
    </div>
      <%= f.submit '送信する' %>
      <%= f.submit '戻る', name: 'back' %>
  </div>
<% end %>
투고 완료 화면
app/views/messages/done.html.erb
<div>
  <h2>メッセージ送信完了</h2>
  <p>
    メッセージをいただきありがとうございました。
  </p>
</div>

STEP4


모델 생성하기
이번에는 데이터베이스를 사용하지 않고 모델은 Active Model을 사용합니다.
app/models/message.rb

class Message include ActiveModel::Model

  attr_accessor :name, :email, :content

  validates :name, presence: true, length: { maximum: 20 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 30 },
                    format: { with: VALID_EMAIL_REGEX }
  validates :content, presence: true, length: { maximum: 200 }
end

STEP5


환경 변수에서 메일 주소와 2단계 인증 비밀번호를 설정합니다.
아직 2급 인증 비밀번호를 발행하지 않은 사람은 아래의 글을 확인하세요.
참고 자료
https://www.howtonote.jp/google-account/2step-verify/index6.html
환경 변수는credentials입니다.yml.enc에서 설정되었습니다.
이 보도에 방법을 기재하였다.
https://qiita.com/shimpex/items/9e75863efc1808aad23d

STEP6


메르를 창건하다.
단말기
$ rails generate mailer MessageMailer
app/mailers/message_mailer.rb

class MessageMailer < ApplicationMailer
  default to: Rails.application.credentials.g_mail[:g_mail] # 送信先アドレス

  def received_email(message)
    @message = message
    mail(subject: 'webサイトよりメッセージが届きました') do |format|
      format.text
    end
  end

end
받은 우편물의 내용을 기술하다.
app/views/message_mailer/received_email.text.erb

<%= @message.name %>様からメッセージが届きました。

メールアドレス:<%= @message.email %>
内容:<%= @message.content %>

STEP7


메일 서버 설정
config/environments/development.rb

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :domain => "gmail.com",
      :user_name => Rails.application.credentials.g_mail[:g_mail], # 送信先アドレス
      :password => Rails.application.credentials.g_mail[:g_pass], #2段階認証パスワード
      :authentication => :plain,
      :enable_starttls_auto => true
  }
적용을 위해 rails를 다시 해주세요.
이상의 상담 형식은 완료되었습니다.
그런 다음 필요에 따라 CSS에서 뷰를 조정합니다.

최후


환경 변수의 설정과 상담 형식의 제작에는 여러 가지 방법이 있기 때문에 어느 것이 우수한지 판단하기 어렵지만, 우선 상술한 방법으로 문의 형식의 투고와 메일을 받을 수 있다.
감사합니다.

좋은 웹페이지 즐겨찾기