Mail Package
NaifyMail
メール組み立て・送信パッケージ
NaifyMailとは
メールの件名や宛先、本文の文字列結合がPHPコードの中に散らばると、文面の確認や修正のたびにプログラムを追うことになります。
NaifyMail(ナイフィメール)は、メールメッセージの組み立てと送信手段(Transfer)を切り分けて扱うパッケージです。<mail:subject>や<mail:body>などのタグを書いたテンプレート文字列をMessage::setTemplate()に渡すことで、件名・差出人・宛先・本文を1つのテンプレートファイル側でまとめて管理できます。
外部ライブラリに依存せず、SMTPソケット通信(STARTTLS・SSL・SMTP AUTH対応)、PHP標準のmail()関数、テスト用のコールバック送信を同じインターフェースで切り替えられます。
使い始めるには
起動処理でNaifyMail::boot()と送信手段(setTransfer())を設定し、送信箇所でNaifyMail::createMessage()とNaifyMail::send()を呼び出します。コントローラやNaifyViewと組み合わせた実践的なコードはメール送信の実装例で確認できます。
use NaifyMail\NaifyMail;
use NaifyMail\Transfer\SmtpTransfer;
require __DIR__ . '/libs/NaifyMail/NaifyMail.php';
NaifyMail::boot();
// 1. 送信手段(Transfer)を設定する
NaifyMail::setTransfer(
SmtpTransfer::create()
->server('smtp.example.com')
->port(587)
->tls()
->username('info@example.com')
->password('secret-password')
);
// 2. メッセージを組み立てて送信する
$message = NaifyMail::createMessage()
->setFrom('info@example.com', 'Naifyサポート')
->addTo('user@example.com', '山田 太郎 様')
->setSubject('お問い合わせを受け付けました')
->setBody("山田 太郎 様\n\nお問い合わせありがとうございます。");
NaifyMail::send($message);
メール本文の定義とTransfer設定
Message::setTemplate()を使うと、NaifyViewなどで描画したテンプレート文字列から件名・差出人・宛先・本文を一括で反映できます。
| テンプレートタグ | 役割と記述例 |
|---|---|
<mail:subject> | メールの件名を設定します(例:<mail:subject>【Naify】登録完了のお知らせ</mail:subject>) |
<mail:from> / <mail:reply-to> | 差出人や返信先を設定します。name="表示名"属性または表示名 <info@example.com>形式に対応します |
<mail:to> / <mail:cc> / <mail:bcc> | 宛先・CC・BCCを追加します。テンプレート内に複数記述するとそれぞれ追加されます |
<mail:body> | メール本文を設定します。タグ直後の先頭改行と末尾改行は自動で整形されます |
プレーンテキストメール(既定のtext/plain)では、テンプレートエンジン側で自動エスケープされたHTMLエンティティもsetTemplate()取り込み時にデコードされ、改行コードもRFC準拠のCRLFへ正規化されます。文字コードはUTF-8(既定)とISO-2022-JP(Mailer::ENCODING_JIS)に対応し、添付ファイル(addAttachment() / addAttachmentFromString())がある場合は自動でマルチパート形式へ組み立てられます。
対応する範囲
含むもの
<mail:*>タグ付きテンプレートからの件名・宛先・本文抽出- From / Reply-To / Return-Path / To / Cc / Bcc / 追加ヘッダーの管理
- ファイルパスまたは文字列データからの添付ファイル追加(multipart/mixed)
- UTF-8・ISO-2022-JP(JIS)のエンコードとMIMEヘッダー分割
- SMTP送信、PHP
mail()送信、コールバック送信の切り替え
含まないもの
- 特定のテンプレートエンジンへの直接依存(描画後の文字列を受け取る設計)
- 非同期ジョブキューや配信スケジューラ
- バウンスメールの受信解析や開封トラッキング
主要クラス
普段の実装では、入口のNaifyMailと、メッセージを保持するMessage、送信方式を表す各Transferクラスを使います。
| クラス | 役割 |
|---|---|
NaifyMail | パッケージの入口。オートローダー登録(boot())、Transfer設定、Message生成、送信(send())を担当します |
Mailer | Transferや既定の文字コード(setDefaultEncoding())、既定の差出人(setDefaultFrom())を管理します |
Message | 1通分の差出人・宛先・件名・本文・添付ファイルを保持し、setTemplate()による解析とRFC形式へのエンコードを行います |
TransferInterface | メール送信手段の共通インターフェース(send(Message $message): void)です |
SmtpTransfer | SMTPソケット通信による送信実装。ホスト・ポート・STARTTLS・Implicit SSL・AUTH LOGIN認証に対応します |
PhpSendMailTransfer | PHP標準のmail()関数による送信実装。Return-Pathから-fパラメータを自動設定します |
CallbackTransfer | 任意のコールバック関数でMessageを受け取る実装。開発環境での送信確認や自動テストに使えます |