回答編集履歴
1
From行が複数行になる件など追記
test
CHANGED
@@ -69,3 +69,53 @@
|
|
69
69
|
```
|
70
70
|
|
71
71
|
だと文字化けしてしまいます。
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
#追記
|
76
|
+
|
77
|
+
上記のような長いFromだと、エンコードした際には複数行になってしまいます。
|
78
|
+
|
79
|
+
これは、RFC2822あたりの、「一行の長さは78文字以下であるべきである」に割と忠実で、これ自体が問題ではないです。
|
80
|
+
|
81
|
+
たとえば上記のコードであればエンコード後のFromは
|
82
|
+
|
83
|
+
```
|
84
|
+
|
85
|
+
From: =?ISO-2022-JP?B?GyRCJEokcyRAJCskOSQ0JC8kOSQ0JC9EOSQkJCokXiQxJEslNyVVGyhC?=
|
86
|
+
|
87
|
+
=?ISO-2022-JP?B?GyRCJUglOCU5JCw3eSQkJEolRCRIJCtJPSRIJCtGfiRDJEYkJCRrGyhC?=
|
88
|
+
|
89
|
+
=?ISO-2022-JP?B?GyRCJGQkaSQ3JCQkSiReJCgkRyQ3JCskYkQ5JDkkLiRGMj0kMSRkGyhC?=
|
90
|
+
|
91
|
+
=?ISO-2022-JP?B?GyRCJDkkPSQmJEolIiVsJCwkIiRsJEokSiReJCgkTiVGJTklSBsoQg==?=<nobody@example.com>
|
92
|
+
|
93
|
+
```
|
94
|
+
|
95
|
+
のようになります。
|
96
|
+
|
97
|
+
このように長いヘッダーフィールドは、RFC2047の規定により、複数の 'encoded-word' を含むある特定のヘッダフィールドを表示する時は、隣接する 'encoded-word' を分離するあらゆる 'linear-white-space' は無視されることになっています。
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
ですので、通常であればこれは一つのFromヘッダとして認識されるべきです。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
しかしながら、一部のUnix/Linux系のメールサーバ(MTA)では、行末改行コードにLFのみを期待していて、かつLFがきたらCR+LFに変換する、という大きなお世話をするものがあります。
|
106
|
+
|
107
|
+
(手元で調べてみたところqmail、postfixなどがそれにあたるようです)
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
もしそのような環境であれば、上記の複数行Fromは最初の行だけがヘッダとしてみなされ、次の行には空行が入ってしまうため、それ以降の行が本文として認識されるような事態になります。
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
これはとてもよろしくないので、もしそういう環境なら、
|
116
|
+
|
117
|
+
`preg_replace()`などで改行コードをLFにして渡すしかないでしょう(RFC違反っぽいのであんまり好ましくないけど)
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
|