RailsでHTML+テキストメールを送信する方法|Action Mailerのmultipart/alternative完全入門
生徒
「Railsでメールを送れるって聞いたんですが、文字だけじゃなくて、きれいなHTMLメールも送れるんですか?」
先生
「できますよ。RailsのAction Mailerを使えば、HTMLとテキストの両方を一度に送ることができます。」
生徒
「HTMLとテキストの両方って、どういう意味ですか?」
先生
「メールソフトに合わせて、見やすいHTML版と、文字だけの安全なテキスト版を自動で切り替える仕組みです。順番に見ていきましょう。」
1. Action Mailerとは?Railsのメール送信機能を理解しよう
Action Mailer(アクションメイラー)とは、Railsでメールを送信するための標準機能です。Webアプリケーションから「ユーザー登録完了メール」や「パスワード再設定メール」などを送るときに使われます。
Railsでは、メールもMVCという考え方で整理されています。MVCとは、役割を分けて考える設計方法です。メールの場合も、メールの処理を書く場所と、見た目を書く場所が分かれています。
この仕組みのおかげで、初心者でもメール内容を安全に、きれいに管理できます。
2. HTMLメールとテキストメールの違いとは?
メールには大きく分けて2種類あります。HTMLメールとテキストメールです。
HTMLメールは、文字に色をつけたり、改行やレイアウトを整えたりできる、見た目がきれいなメールです。一方、テキストメールは文字だけで構成された、シンプルで安全性の高いメールです。
人によって使っているメールソフトが違うため、HTMLが表示できない場合もあります。そこでRailsでは、multipart/alternativeという仕組みを使い、HTML版とテキスト版を同時に送信します。
3. メイラーを作成しよう(rails generate mailer)
まずは、メール専用のクラスであるメイラーを作成します。ターミナルに次のコマンドを入力します。
rails generate mailer UserMailer
このコマンドを実行すると、メール用のフォルダやファイルが自動で作られます。Railsは「決まった形」を大切にするため、初心者でも迷いにくい構成になっています。
4. メール送信メソッドを定義する
次に、実際に送るメールの内容をメイラーに書きます。ここでは「登録完了メール」を例にします。
class UserMailer < ApplicationMailer
def welcome_email(user)
@user = user
mail(to: user.email, subject: '登録ありがとうございます')
end
end
mailはメールを送る命令です。宛先や件名を指定するだけで、Railsが必要な処理を自動で行ってくれます。
5. HTMLテンプレートを作成する
HTMLメールの見た目は、ビュー(テンプレート)で作ります。HTMLを書く場所は決まっていて、ファイル名もルールがあります。
<h1>ようこそ、<%= @user.name %>さん</h1>
<p>Railsアプリへのご登録ありがとうございます。</p>
<p>これからサービスをご利用いただけます。</p>
このHTMLは、普通のWebページとほぼ同じ感覚で書けます。難しい知識は不要です。
6. テキストテンプレートを作成する
次に、文字だけのテキストメールを作ります。HTMLと同じ内容を、シンプルな文章で書きます。
ようこそ、<%= @user.name %>さん
ご登録ありがとうございます。
サービスをご利用いただけます。
HTML版とテキスト版の両方があることで、どんな環境でもメールを正しく読めます。
7. multipart/alternativeが自動で使われる仕組み
Railsでは、HTML用とテキスト用のテンプレートを両方用意するだけで、自動的にmultipart/alternative形式になります。
難しい設定を書く必要はありません。Railsが「両方あるなら、両方送る」という判断をしてくれます。
これは初心者にとって非常に安心できるポイントです。
8. メールのテスト方法(プレビューとテストコード)
実際にメールを送る前に、内容を確認する方法があります。Railsにはメールプレビュー機能が用意されています。
UserMailer.welcome_email(user).deliver_now
また、テストコードを書くことで、メールが正しく作られているかを自動で確認できます。
mail = UserMailer.welcome_email(user)
puts mail.subject
登録ありがとうございます
このように、送信せずに中身だけを確認できるので安心です。