回答編集履歴
1
From行が複数行になる件など追記
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
|
+
|