dT*blog

design and programming

sendmail が勝手に改行コードを挿入する件

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だと思います。お疲れさまでした。

Posted by dT by 18:08

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/284

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30