#早速作っていこ〜
Railsガイドによると
Action Mailerを使うと、アプリケーションのメイラークラスやビューでメールを送信することができます。メイラーの動作はコントローラときわめて似通っています。メイラーはActionMailer::Baseを継承し、app/mailersに配置され、app/viewsにあるビューと結び付けられます。
ということなのでgemとかいらないんです。
今回はcontact formに件名と内容をユーザーに打ってもらってそれをdbに保存してメールにも送るという構成で作っていきます。では必要なもの作っていきます
(docker-compose run 書くの長いので割愛 docker使ってないひとはこのままでok)
#モデル作っていきます
$ rails g model Contact name:string message:text
#おまじないいきま〜す
$ rails db:migrate
#ユーザーに入力してもらうformを作るためにコントローラー、ビューも作ります
$ rails g controller contacts new(newだけで十分です)
そういえば、modelにバリデーションで どちらのカラムにもpresence: true書いておくといいと思います。
空のメールが何件も届くかもしれないので
コントローラーの処理書いていきます
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
#↓あとで定義します(これでメール送信)
ConatactMiler.contact_mail(@contact).deliver
flash[:success] = 'メールを送信しました'
redirect_to root_path #←お好きな場所へ
else
flash[:danger] = 'メールの送信に失敗しました'
render :new
end
def contact_params
params.require(:contact).permit(:name, :message)
end
ビューも書いちゃいましょう
<%= form_with(model: @contact, local: true) do |f| %>
<%= f.label :name, '名前' %>
<%= f.text_field :name %>
<%= f.label :message, 'お問い合せ内容' %>
<%= f.text_area :message, size: "5x10" %>
<%= f.submit '送信' %>
<% end %>
ここまではいつも通りですね
本命のaction mailer作っていきます
$ rails g mailer contact
次はさっきのcontact_mailerを定義していきます
def contact_mail(contact)
@contact = contact
mail to: '自分のeメール', subject: 'メールの件名'
end
お次はメールの内容を作ります。
<%= @contact.name %>様からお問い合わせがありました
・お問い合わせ内容
<%= @contact.message %>
次にgmailの設定を行っていきます
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
domain: 'gmail.com',
port:587,
user_name: '自分のgmail',
password: 'パスワード', #←これはgmailのパスワードではなくgoogleアカウント管理画面で作成します
authentication: :login
}
これの内容全部説明するのはめんどくさいので説明します
上からメール送信有効にする、送信できなかったらエラー吐く、メイラーはコントローラーとはHTTPリクエストのコンテキストが異なるから明示する、メールの送信方法、その設定諸々。
最後に
#default from: "from@example.com" ←デフォルト
defult from: "自分のeメール"
layout 'mailer'
これはしなくてもいいかもしれない。
完成!!
エラーがでたらエラーを潰していくしかないです。あと、eメールとpasswordは環境変数で設定しておかないとgitに上がっちゃいますのでご注意を!!!!