CGIでメールを送信する際の件名や宛先の文字化け
CGIでメールを送信する際、件名や宛先の文字化けが文字化けすることがある。
その際は、生田 昇さんという方が公開されている mime_pls というライブラリを利用すると便利。
http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html
上記から、 mimer.pl と mimew.pl という perl スクリプトを入手できます。
mimer.pl はデコード用、mimew.pl はエンコード用です。
エンコードする場合は、mimew.pl を使います。
使い方は簡単で、MIME エンコードしたい文字列を &mimeencode に 渡せば、エンコードした文字列を返してくれます。
#!/usr/local/bin/perl require 'mimew.pl'; $sendmail = '/usr/sbin/sendmail'; $nkf = '/usr/local/bin/nkf'; $from = '山田太郎 <taroh@foo.org>'; # 宛先の書き方1 $to = 'tanaka@tanaka.hoge.org (田中次郎)'; # 宛先の書き方2 $cc = '河田花子 <hanako@fuga.org>'; $subject = 'サブジェクト'; $body = <<END; 本文です。てすとてすと。 ほげほげ。ふがふが。むにゃむにゃ。 END open(SENDMAIL,"| $nkf -j | $sendmail -t -i"); # &mimeencode で MIME エンコード $encoded_from = &mimeencode($from); $encoded_to = &mimeencode($to); $encoded_cc = &mimeencode($cc); $encoded_subject = &mimeencode($subject); print SENDMAIL "From: $encoded_from\n"; print SENDMAIL "To: $encoded_to\n"; print SENDMAIL "Cc: $encoded_cc\n"; print SENDMAIL "Subject: $encoded_subject\n"; print SENDMAIL "\n"; print SENDMAIL "$body"; close(SENDMAIL);