スマレジ開発ひよっこblog

株式会社スマレジの開発チームで働くデザイナーのブログ

CakePHPメモ:cakeEmailでのhtmlメール送信

CakePHP でhtmlメール送信を実装する機会があったので覚書です。


今回はすでにcakeEmailというメール送信用のクラスを使って送信されているtextメールからの改修作業だったため、下記の手順で割と簡単にhtmlメールの送信が可能になりました。

※今回はマルチパート配信にしたかったためそのための手順になります。
(マルチパート配信:htmlメール対応のメーラーではhtmlメールが表示され、
 htmlメール非対応のメーラーではtextメールが表示されるよう、両方のソースを含んだメールを配信する方法です)


htmlのメールテンプレートを用意

下記のディレクトリにhtmlのテンプレートを用意。
app/View/Emails/html
app/View/Layouts/Emails/html(レイアウトを使用している場合)

※マルチパート配信では、送信時にはapp/View/Emails/text内の同名テンプレート(今回はすでにあった)も必要になります。


配信形式を指定する

cakeEmailクラスのインスタンスのemailFormatメソッドで引数としてメールの書式を渡す。
選択肢はhtml, text または both。マルチパート配信は'both'を渡します。

$Email ->emailFormat('both')

※$EmailはcakeEmailクラスのインスタンス
※メールに関する設定はapp/Config/email.phpファイルを作成してEmailConfigクラス内にまとめて指定できるのですが、
今回はtextメールとhtmlメール(マルチパート)の切り替えも別途実装したため、各メールの送信処理時に送信形式を指定するようにしています。

 

参照:CakeEmail

 

落とし穴

テンプレートにsmartyを使っていると、テンプレートレンダリング時にキャッシュが残ってしまうらしく、
マルチパート配信や同時に複数の形式で送信をしようとした際にうまくいかないようです。
今回はもともとtextメールでsmartyが使われていたこともあり、htmlメールも一度ひととおりsmartyでテンプレートを用意し、その後で上記の問題が発覚したため、textのテンプレートも含めすべて.tplをやめて.ctpにして書き換えるという修正が発生しました。

スタイルの指定の仕方によっては、メーラーによりレイアウトが崩れてしまうため、注意が必要。
paddingが効かない、liタグのliststyleが効かない等あるようで、適宜テーブルレイアウトへの置き換え等の修正を行いました。

 

 

おまけ

chromeでオフラインの時に出てくる恐竜くんがいます。
帰省中で、wi-fiの届かない部屋があるのでしばらく恐竜くん出たままにしていたんです。
しばらくそのままにしてたら、ウインクしたんですよね。
へえ、動くんだ、と思ってなんとなく興味をもって、なんとなくキーボードをさわったら、なんと恐竜くんゲームが始まりました!なんか嬉しい!

スペースキーを押すと始まるそうです。

知らなかったー。