質問するログイン新規登録

回答編集履歴

1

From行が複数行になる件など追記

2016/10/11 01:46

投稿

imutakaoru
imutakaoru

スコア356

answer CHANGED
@@ -33,4 +33,28 @@
33
33
  var_dump($headers) ;
34
34
  ?>
35
35
  ```
36
- だと文字化けしてしまいます。
36
+ だと文字化けしてしまいます。
37
+
38
+ #追記
39
+ 上記のような長いFromだと、エンコードした際には複数行になってしまいます。
40
+ これは、RFC2822あたりの、「一行の長さは78文字以下であるべきである」に割と忠実で、これ自体が問題ではないです。
41
+ たとえば上記のコードであればエンコード後のFromは
42
+ ```
43
+ From: =?ISO-2022-JP?B?GyRCJEokcyRAJCskOSQ0JC8kOSQ0JC9EOSQkJCokXiQxJEslNyVVGyhC?=
44
+ =?ISO-2022-JP?B?GyRCJUglOCU5JCw3eSQkJEolRCRIJCtJPSRIJCtGfiRDJEYkJCRrGyhC?=
45
+ =?ISO-2022-JP?B?GyRCJGQkaSQ3JCQkSiReJCgkRyQ3JCskYkQ5JDkkLiRGMj0kMSRkGyhC?=
46
+ =?ISO-2022-JP?B?GyRCJDkkPSQmJEolIiVsJCwkIiRsJEokSiReJCgkTiVGJTklSBsoQg==?=<nobody@example.com>
47
+ ```
48
+ のようになります。
49
+ このように長いヘッダーフィールドは、RFC2047の規定により、複数の 'encoded-word' を含むある特定のヘッダフィールドを表示する時は、隣接する 'encoded-word' を分離するあらゆる 'linear-white-space' は無視されることになっています。
50
+
51
+ ですので、通常であればこれは一つのFromヘッダとして認識されるべきです。
52
+
53
+ しかしながら、一部のUnix/Linux系のメールサーバ(MTA)では、行末改行コードにLFのみを期待していて、かつLFがきたらCR+LFに変換する、という大きなお世話をするものがあります。
54
+ (手元で調べてみたところqmail、postfixなどがそれにあたるようです)
55
+
56
+ もしそのような環境であれば、上記の複数行Fromは最初の行だけがヘッダとしてみなされ、次の行には空行が入ってしまうため、それ以降の行が本文として認識されるような事態になります。
57
+
58
+ これはとてもよろしくないので、もしそういう環境なら、
59
+ `preg_replace()`などで改行コードをLFにして渡すしかないでしょう(RFC違反っぽいのであんまり好ましくないけど)
60
+