>とはいえ、! で fold されていたというのは気になりますね。 qpopper の場合一行の最大は \0 込みで 1024 bytes です。 ソースを見ると早いでしょう。 /* Send the header of the message followed by a blank line */ while (fgets(buffer, MAXMSGLINELEN, p->drop)) { if (!strncasecmp(buffer, "Content-Length:", 15) || !strncasecmp(buffer, "X-UIDL:", 7)) { /* Skip UIDLs */ continue; /* Content-Length is MTA dependent, don't send to MUA */ } \0 込みと言うのは、fgets 使っているための仕様です。 もしも、512 文字というのが 2 バイト文字の意味で、512 文字なら ちょうどこの制限に引っかかります。\0 込みなので、iso2022-jp なら 途中出来られると ! なんていくらでも出て来ます。iso-2022-jp なら 「。」なんて「!#」とかなりますから。 ただ、普通は困りませんね。rfc で決められている一行の推奨値は 70 bytes + αですから。 問題は本当に POP3 サーバだけの制限なのかということです。 実験の際に使った MUA や MTA の制限も関係あります。 sendmail 8.11.1 のソースを見たら行の長さ関係は 2048 bytes でした。 また POP3 サーバなどをinetd を通している場合 inetd 自体の制限も あります。8192 bytes かな? FreeBSD の inted の場合。ヘッダーしか見て いないので断定できませんけど。 もっとも、自分で /var/mail/ のファイルにメールらしきものを手動で append して実験した場合は話は別ですが。 他にも実験を telnet でやったのなら、telnet などの制限も考えられます。 FreeBSD なら ring buffer 使っているので、 そういう制限はありませんが、OS のベンダによってこの実装は変わるでしょうね。 |