Rails6で「Action Mailer」とGmailのsmtpを使ったメール送信を紹介します。
目次
「Action Mailer」を継承したコントローラーを作成
コマンドから「Action Mailer」を継承したコントローラーを作成します。
※コマンドは「rails generate mailer <コントローラー名>」
rails generate mailer form_mailer
「/app/mailers/<コントローラー名>.rb」が生成されます。
ここにメール送信用のコードを記載します。
class FormMailer < ApplicationMailer
#default from: "aaaaa@example.com"
# メール送信アクション
def confirm_user(forms)
#@greeting = "Hello"
@forms = forms
mail(
from: 'aaaaa@example.com',
to: @forms.form_email,
#bcc: 'bbbbb@example.com',
subject: '<テストメール>お問い合わせ内容が送信されました'
) do |format|
format.text #テキストメールを指定
#format.html #HTMLメールを指定
end
end
end
※以下はメール送信には必要なかったのですが、上記でformのモデルを使っているので参考までに掲載
class Form
#include ActiveModel::Model
include ActiveModel::Validations
#要素を定義します
attr_accessor :form_onamae,
:form_hurigana,
:form_email,
:form_tel,
:form_message
#バリデーションの定義
MaxLength1 = 25
MaxLength2 = 100
MaxLength3 = 15
MaxLength4 = 1000
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
VALID_PHONE_REGEX = /\A\d{10}$|^\d{11}\z/i
validates :form_onamae,
presence: true,
length: { maximum: MaxLength1 }
#validates :form_hurigana,
# presence: true
validates :form_email,
presence: true,
length: { maximum: MaxLength2 },
format: { with: VALID_EMAIL_REGEX }
validates :form_tel,
#presence: true,
length: { maximum: MaxLength3 }
#format: { with: VALID_PHONE_REGEX }
validates :form_message,
presence: true,
length: { maximum: MaxLength4 }
end
GoogleアカウントでGmailのSMTP送信用アプリパスワードを取得
Googleアカウントより、GmailのSMTP送信用アプリパスワードを取得します。
「アプリ
「アプリパスワード」を取得する事でメール送信時にGmailのSMTPが利用できます。
SMTP設定をコンフィグに記載
「/config/environments/development.rb」にGmailのSMTP設定を追記します。
※テスト環境は「test.rb」、本番環境は「production.rb」へ記載
# メール送信関連の設定
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'example.com',
:user_name => 'example@gmail.com',
:password => 'iylhcoywrvnwvcik',
:authentication => :'login',
:enable_starttls_auto => true
}
あとはアクションを実行してメールが送信されていればOKです。
※もしメールが送信出来なかった場合、念の為ウェブサーバーを再起動して再度実行してみて下さい