sendmail 君ってば、未改行の長文をメールしようとすると、勝手に改行コードを挿入してくれちゃうのね。知らなかった。うちの環境だと、986バイトを超えると強制改行コード。優しい仕様だとは思うんだけど、2バイト文字を分断してでも改行コード入れる一途さに、ちょっと辟易。
どうしようもないので、sendmail に文字列を渡す前に、自前で長すぎるテキストを改行するように変更。もちろんマルチバイト対応で。
以下、ソース。(perl なのに Shift_JIS 専用)
sub fold {
my ($str, $n) = @_;
my $ret = "";
my $len = 0;
# 指定無き場合、200文字で折り返す
$n ||= 400;
while($str =~ m{([\n]) | # 改行コード
([\x00-\x7F\xA1-\xDF]) | # 1byte
([\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]) | # 2byte
.}gx) {
if (defined $1) { $ret .= $1; $len = 0 };
if (defined $2) { $ret .= $2; $len++ };
if (defined $3) { $ret .= $3; $len += 2 };
if ($n <= $len) { $ret .= "\n"; $len = 0 }
}
chomp $ret;
return $ret;
}
euc-jp の人とかは、文字コードのとこを適当に書き換えればOKだと思います。お疲れさまでした。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/284
