Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

さくらのレンタルサーバーからメール送信する

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

PHPでHTMLメール送信

フォームで情報を入力してもらった際、PHPから同時にメールで情報が飛ぶようにしたい。せっかくだからHTMLメールを送信できるか、試してみよう。

ameblo.jp

メール届くだけならこれで届いたんだけど、まだ中身がぐちゃぐちゃ。むむむ。 ということで、もう少し情報を探してみる。

タイトルからしてキャッチー。nice html email、まさにそれだよ私が送りたいのは。

Sending Nice HTML Email with PHP | CSS-Tricks

\r\nってのは改行コードだよなこれたぶん。

charsetの指定、海外サイトだとちょっと不安だったので日本語のサイトを探した。 coliss.com

techblog.ecstudio.jp

ちゃんと情報は届いたんだけど、htmlタグがそのまま見えちゃう。うーん、何が問題なんだ? 

mb_convert_encodingのエラー

いくつかいじっているうちに、「mb_convert_encoding(): Illegal character encoding specified」のエラーが出てしまった。むむむ。悪化してるじゃん。

apocriphanet.blog17.fc2.com

qiita.com

この辺り参考になる。

どうも、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でつながっちゃっている。改行コードが問題か。

blog.poyo.jp

ちゃんと\r\nで記述しているのだけれど、オリジナルソースの方は「From:hoge@hoge.jprn MIME-Version":1.0\r\n」のように、最初のFrom行の末尾のバックスラッシュが認識されずに溶けてしまっている。なんだこりゃ。半角アキを入れたりしてみたが、効果無し。

php mb_send_mail 改行コード バックスラッシュが消える」で検索して、いくつかポチポチ見ていたら、答えが見つかった。

www.tryphp.net

おお。シングルクォートのせいか。無意識にシングルクォート使ってたから気づかなかったわ。

いくつか阿呆な記述ミスを修正したら、無事、HTMLパースされたメールが届くように。やったー!

いくつかの記事で「CSSはインラインで書くように」とあったけれど、Pinterestのメールはスタイル要素使ってヘッダに書いているようなので、その辺は今後の研究ということで。