エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

   

CakePHP3でメールを送信する処理を解説

 
CakePHP3でメールを送信する処理を解説します。
 
 

CakePHP3のメール送信処理の設定ファイル

 
まず最初に、CakePHP3のメール処理設定の確認です。
CakePHP3のメールの送信処理の設定情報は、「/config/app.php」にあります。190行目辺りでしょうか。
 

 
上記はデフォルトの設定ですが、今回は上記の通り「’className’ => ‘Mail’」になっている状態での想定で解説をします。
 
 
この設定についても解説をしておくと、「className」に指定する値は、「Mail」「Smtp」「Debug」のいずれかです。
 
「Mail」が指定されている場合は、PHPの mail()関数を使用してメールを送信します。
「Smtp」が指定されている場合は、指定されてある SMTPサーバを使用してメールを送信します。
「Debug」が指定されている場合は、デバッグ用の処理として実行され、実際にメールの送信は行いません。
 
「host」から「url」までの設定は、「’className’ => ‘Smtp’」の設定となっている場合のみ有効です。
それ以外の時は使われませんのでデフォルトのままで問題ありません。
 
 

CakePHP3でメールを送信する基本形

 
CakePHP3で一番簡単な方法でメールを送信する場合は、以下のように設定します。
まずは、この設定でメールが送信できるかどうかを確認しましょう。
 

 
まず、6行目の Emailクラスをロードする処理を記述します。
 
19行目で、Emailクラスのインスタンスを作成します。
作成したインスタンスに対して、22行目からあるように、メソッド・チェーンで必要なプロパティを設定していきます。
 
上記では setFrom()、setTo()、setCc()、setBcc()、setSubject()を使用していますが、これは、CakePHP3.4以降の仕様です。
 
CakePHP3.4より前のバージョンでは、from()、to()、cc()、bcc()、subject()を使用します。
 
setCc()、setBcc()の設定が必要ない場合は、設定の行ごと削除します。
setCc("")」のように、nullを設定するとエラーになります。
 
 
また、19行目でインスタンスを作成する処理は、下記の様に記述することもできます。
 

 
上記で書いている setProfile()は、他の設定と同じく CakePHP3.4以降の仕様です。
CakePHP3.4より前のバージョンでは、profile()を使用します。
 
 
また、設定名の「default」を渡す代わりに、オプションの配列をロードすることもできます。
 

 
 

CakePHP3でメールを送信する際にテンプレートを使用する

 
メールフォーム(お問い合わせフォーム)などでメールを送信する場合は、メールの本文をプログラムの中に記述することはありません。
メールの本文は、テンプレートファイルとして別ファイルにし、そのファイルに変数を編集することでメールの本文を完成させます。
 
ここでは、テンプレートファイルを利用してメールを送信する方法を解説します。
 
 
テンプレートを指定する場合は、下記の 2~4行目のように setTemplate()、setLayout()、emailFormat()で指定します。
 

 
2行目の「setTemplate()」でテンプレートファイルを指定し、3行目の「setLayout()」でレイアウトファイルを指定します。
レイアウトファイルを指定しない場合は「setTemplate()」のみの設定で OKです。
 
テンプレートファイルを上記のように「inquiriesForm」と指定する場合は、下記のファイルが使われます。
/src/Template/Email/text/inquiries_form.ctp
 
レイアウトファイルを上記のように「inquiriesFormLayout」と指定する場合は、下記のファイルが使われます。
src/Template/Layout/Email/text/inquiriesFormLayout.ctp
 
上記のように複数単語の組み合わせでファイルを指定する場合は注意が必要です。
テンプレートファイルの指定が、「inquiriesForm」の場合の実ファイルは「inquiries_form.ctp」となります。
「inquiriesForm.ctp」では、「ファイルがありません」というエラーになります。
 
しかし、テンプレートファイルの指定が、「inquiriesFormLayout」の場合の実ファイルは「inquiriesFormLayout.ctp」となります。
「inquiries_form_layout.ctp」では、「ファイルがありません」というエラーになります。
 
 
4行目の「emailFormat()」で指定する引数は「text」です。
 
これは「text」タイプのメールを送信することを指定していることになります。
「html」とすると「html」タイプのメールを送信し、「both」とすると「text」「html」の両方を使うマルチパートのメールを送信します。
 
「html」タイプのテンプレートファイルは、以下のものになります。
src/Template/Email/html/inquiries_form.ctp
src/Template/Layout/Email/html/inquiriesFormLayout.ctp
 
 
ちなみに、CakePHP3.4以降は上記で解説したように「setTemplate()」「setLayout()」で設定します。
ですが、CakePHP3.4より前のバージョンでは、「template(“inquiriesForm”, “inquiriesFormLayout”)」のように、「template()」で指定します。1つ目の引数がテンプレートのファイルで、2つ目がレイアウトのファイルです。
 
 
9行目、10行目が、テンプレートに編集する値を指定している箇所です。
 
「viewVars()」を使って値を指定します。
値の指定は連想配列で「変数名 => 値」のように指定します。
上記の例では、「名前」として入力された「name」という値と、「ふりがな」として入力された「ruby」という値を編集している想定です。
 
 
また、テンプレートファイル「inquiries_form.ctp」の中身は以下のようになります。
「viewVars()」で指定した変数が編集されます。
 

 
また、「$content」には、「send()」で指定した引数の文字列が編集されます。
上記の例では「お問い合わせの本文です」の文字列が入ります。
 
 
「send()」はメールを送信する処理そのものですので、「viewVars()」なども含め設定情報は全て、「send()」より前に記述します。
(私は「send()」の後に「viewVars()」を書いていて、何で動かないのか、しばらく悩んでいました。)
 
また、上記の例では「send()」に引数を入れていますが、テンプレートに編集する値をすべて「viewVars()」で指定しているのであれば、「send()」に引数を指定する必要はありません。
 
 
レイアウトファイル「inquiriesFormLayout.ctp」の中身は以下のようになります。
「$this->fetch(‘content’)」を記述した場所に、テンプレートファイルの中身が編集されます。
 

 
 

CakePHP3でメールを送信する際に添付ファイルを一緒に送信する方法

 
CakePHP3でメール送信時に添付ファイルを一緒に送信する場合は「attachments()」を使用します。
 

 
 
一番ベーシックな「attachments()」の使い方が上記の記述方法です。
引数として、添付するファイルをフルパスで指定します。
 
この場合の「フルパス」はサーバのルートからのフルパスです。
ドキュメントルートからのフルパスではありません。
 
また、指定したファイルがない場合はエラーとなりますので、実処理上はファイルのありなしのチェックが必要です。
ただ、「null」を指定した場合は、「webroot」という 0バイトのファイルが添付されてきます。
 
 
ちなみに、CakePHP3.4以降は上記で解説したように「setAttachments()」で設定します。
ですが、CakePHP3.4より前のバージョンでは、「attachments()」で指定します。
 
 
下記の様に配列として指定することで複数のファイルを添付することができます。
動作は前項の文字列として指定した場合と同じです。
 

 
 
下記の様に連想配列でファイルを指定すると、ファイル名は、キーとして指定したファイル名で添付されます。
 

 
ファイル名の重複や日本語ファイル名などによる不具合を避けるために、アップロードされたファイル名を付けなおしている場合などは、このようにして元のファイル名を付けなおして送信する、といった処理が必要になるでしょう。
 
 
さらに、下記の様に「mimetype」「contentId」を付与する方法もあります。
 

 
 

CakePHP3でメールを送信する方法についての解説まとめ

 
これまで解説した内容があれば、メールフォーム(お問い合わせフォーム)からメールを送信する処理は作成できるかと思います。
 
今回は、SMTPサーバに接続する方法や、メールトランスポートを使用する方法などは解説していませんので、それらの解説についてはまたいずれ解説記事を書く予定です。

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。

CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法

CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。

Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説

CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説

CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法

CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。