SOFTELメモ

</> 技術者募集

【php】mail関数の改行コード注意点

PHPのmail関数、引数に渡すデータの改行コードに注意。

ヘッダが正しくないメールが生成されて、正常に読めないメールが送られたりする。

本文

mail()関数に渡すときは、本文はLFで改行するようにとマニュアルに書いてある。
自力でSMTPに直接渡すときなどはCRLFなのだけど(RFC2822参照)。

ヘッダー

MTAにqmailを使用しているときは、subject(件名)の改行にはLFを使うこと。

つまり、

$subject = mb_encode_mimeheader('長い件名。長い件名。長い件名。長い件名。長い件名。', 'JIS', 'B', "\n"); 

subjectの改行は、長い件名のときに発生(RFC 2047)。件名が短いときは特に問題に気づかないと思う。こちらもインターネットメールの世界では改行はCRLFが原則。

まとめ

mail()関数に渡すなら、
・ 本文はLF。
・ subjectはMTAによってまちまち。
・ subject以外のヘッダーはCRLFで渡す。

・ (改行とは別の問題だけど)mb_encode_mimeheaderに渡す文字列の文字コードとmb_internal_encodingは一致させておいた方がよいらしい。偶然phpの設定がよい具合だと、あえて設定しなくても大丈夫かもしれない。

マニュアルはこちら
http://php.net/manual/ja/function.mail.php

関連するメモ

コメント(1)

IT Harmony 2011年6月11日 10:15

[PHP]長い日本語SubjectのメールをPHPで送信する…

メールをプログラムから送信する際のポイント。特に以下の条件下の場合の対処方法。 ……