• ベストアンサー

CGIでメールを送る際に文字化けするのをなんとかしたい・・・

いま、市販の本についていたDM用のCGIをカスタマイズしているのですが、文字化けと改行コードがうまくいきません。ちゃんと送れるメールアドレスもあるのですが、文字化けしてしまう人もいます。 ちなみにサーバーはLINUXです。なんとか本文の文字化けと改行は直りましたが、宛先と件名がどうしても化けてしまいます。お分りになる方がいましたら、ぜひお教え下さい。ちなみに、文字コードはeuc-jpで統一し、改行はLFでやっています。 sendmailに埋め込む部分をどう修正すべきかが分かりません。 参考までにスクリプトの一部を書きます。 # sendMail利用部 埋め込みコマンドの置き換え sub broadCaster { my $i = 0; my $temp = ''; my $letter = ''; for ($i = 0; $i <= $#lists; $i++){ $temp = "$subject###$body"; $temp =~ s/<CGI:mail>/$listDX[$i][0]/g; $temp =~ s/<CGI:name1>/$listDX[$i][1]/g; $temp =~ s/<CGI:name2>/$listDX[$i][2]/g; $temp =~ s/<CGI:admin name>/$adminName/g; $temp =~ s/<CGI:admin mail>/$adminMail/g; $temp =~ s/<CGI:time>/$now/g; ($tempSubject, $tempBody) = split(/###/, $temp); $tempBody =~ s/\r\n/\n/g; $letter = "X-Mailer: U got Mail\n"; $letter .= "To: \"$listDX[$i][1] $listDX[$i][2] 様\" <$listDX[$i][0]>\n"; $letter .= "From: \"$adminName\" <$adminMail>\n"; $letter .= "Subject: $tempSubject\n\n"; $letter .= "$tempBody\n\n"; $letter = jcode::jis($letter);

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ヘッダーと本文はエンコード形式が違います。 本文はjcodeでエンコードしているようですが ToやらSubjectを正しくMIMEencodeしてますか? ヘッダーはmime_encodeしてみてください。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • odacle
  • ベストアンサー率0% (0/2)
回答No.3

ぼけっとしてました、サンプルで使っているのはjcode.plですね多分。Jcode.pmとは別物です。コマンドが入力できる環境(telnetやssh)があるなら $ perl -MJcode してみてください。Can't locate Jcode.pmと出なければ利用できます。(Ctrl+Cでperlの実行を中止してください) use Jcode; をプログラムの先頭の方に書き加えてください。 入っていなければインストールするか(root権限やtelnetまたはsshのコマンド入力環境が必要です)、mimew.plを使うという方法もあります。 mimew.plを利用するにはプログラムと同じディレクトリに配置して require 'mimew.pl'; $tempSubject = mimeencode($tempSubject); のように書けばよいと思います。 Jcode.pm http://search.cpan.org/~dankogai/Jcode-2.00/ mimew.pl http://itbtech.itboost.co.jp/perl/mimew.pl

すると、全ての回答が全文表示されます。
  • odacle
  • ベストアンサー率0% (0/2)
回答No.2

エンベロープ(ヘッダ)の部分は =?文字コードの宣言?B?宣言された文字列をBase64にエンコードしたもの? で、全体で75文字以上になる場合は改行を入れる。という形式の取り決めがあります。(参照URLのRFC2047を見てください) 例.) =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?= ということをふまえてなければいけませんが、Jcode.pmにはそのための関数が用意されています。jcode::jisを使っているのですでにuse Jcode;は宣言されていると思いますが一応確認してください。 $tempSubject = jcode->($tempSubject)->mime_encode; を$letterより前に入れてください。 あて先の名前はおそらくは$listDX[$i][1..2]あたりに入っているかと思いますが、そこも必要に応じてmime_encodeしてあげてください。 ただし、mail@exsample.comのようなメールアドレスの部分はmime_encode*しないで*ください。

参考URL:
http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc2047j.html
すると、全ての回答が全文表示されます。

関連するQ&A