Mail Package

NaifyMail

メール組み立て・送信パッケージ

テンプレートから件名・本文を定義 SMTP / PHP mail() / Callback対応 UTF-8 / ISO-2022-JP(JIS)対応 PHP 8.0+

とは

メールの件名や宛先、本文の文字列結合が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())を担当します
MailerTransferや既定の文字コード(setDefaultEncoding())、既定の差出人(setDefaultFrom())を管理します
Message1通分の差出人・宛先・件名・本文・添付ファイルを保持し、setTemplate()による解析とRFC形式へのエンコードを行います
TransferInterfaceメール送信手段の共通インターフェース(send(Message $message): void)です
SmtpTransferSMTPソケット通信による送信実装。ホスト・ポート・STARTTLS・Implicit SSL・AUTH LOGIN認証に対応します
PhpSendMailTransferPHP標準のmail()関数による送信実装。Return-Pathから-fパラメータを自動設定します
CallbackTransfer任意のコールバック関数でMessageを受け取る実装。開発環境での送信確認や自動テストに使えます