PHPでHTMLメール送信
フォームで情報を入力してもらった際、PHPから同時にメールで情報が飛ぶようにしたい。せっかくだからHTMLメールを送信できるか、試してみよう。
メール届くだけならこれで届いたんだけど、まだ中身がぐちゃぐちゃ。むむむ。 ということで、もう少し情報を探してみる。
タイトルからしてキャッチー。nice html email、まさにそれだよ私が送りたいのは。
Sending Nice HTML Email with PHP | CSS-Tricks
\r\nってのは改行コードだよなこれたぶん。
charsetの指定、海外サイトだとちょっと不安だったので日本語のサイトを探した。 coliss.com
ちゃんと情報は届いたんだけど、htmlタグがそのまま見えちゃう。うーん、何が問題なんだ?
mb_convert_encodingのエラー
いくつかいじっているうちに、「mb_convert_encoding(): Illegal character encoding specified」のエラーが出てしまった。むむむ。悪化してるじゃん。
この辺り参考になる。
どうも、mb_convert_encodingの文字コード指定に間違えて変な文字列を書いちゃっていたみたい。
mg_internal_encoding(“UTF-8”)にしてmb_convert_encoding(‘From:hoge@hoge.ne.jp\r\n’,‘JIS’,‘EUC-JP’)にするととりあえずエラーはおさまった。
メールのソースを比較
自分のところに正しくhtmlで届いているメール(たとえば、Pinterest)と、htmlソースが見えちゃうメールのオリジナルソースを比較してみた。
あれ、Content-Typeがtext/plainになってしまっている。おかしいな。ちゃんとtext/htmlで書いてるんだけど、反映されてない。
よく見ると、From行から後の改行コードが認識されず、\r\nでつながっちゃっている。改行コードが問題か。
ちゃんと\r\nで記述しているのだけれど、オリジナルソースの方は「From:hoge@hoge.jprn MIME-Version":1.0\r\n」のように、最初のFrom行の末尾のバックスラッシュが認識されずに溶けてしまっている。なんだこりゃ。半角アキを入れたりしてみたが、効果無し。
「php mb_send_mail 改行コード バックスラッシュが消える」で検索して、いくつかポチポチ見ていたら、答えが見つかった。
おお。シングルクォートのせいか。無意識にシングルクォート使ってたから気づかなかったわ。
いくつか阿呆な記述ミスを修正したら、無事、HTMLパースされたメールが届くように。やったー!
いくつかの記事で「CSSはインラインで書くように」とあったけれど、Pinterestのメールはスタイル要素使ってヘッダに書いているようなので、その辺は今後の研究ということで。