回答編集履歴

1

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

2016/10/11 01:46

投稿

imutakaoru
imutakaoru

スコア356

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
+