WEBシステム開発:Perlからメール送信すると~(チルダ)がx{ff5e}文字化け
Perlからメールを送信すると、~、①文字など特殊文字が文字化けをおこします。
メンテナンス業務、保守業務をお申込みになられるクライアント様で
最近話題になったメールの文字化けについて、簡単な解決方法をのせてみます。
文字化け原因
Perlスクリプト、メールの文字コードがJIS(ISO-2022-JP)コード、クライアントがWindowsだとこの問題が発生します。
文字化け対応
EUCJPMS、cp50220などを使用したら解決するだろうと、いろいろなサイトに記載されていますが、
あまり外部ライブラリを使うのが好きじゃあない(環境に依存するのが嫌)私としては、
単純にメールの文字コードをShift_JIS、UTF-8にて送信する事で簡単解決しています。
どうせ、HTMLがShift_JIS、最近ではUTF-8が使われているんだから、メールもUTF-8でいいじゃないの。。。
最近のメールソフトではほぼShift_JIS、UTF-8対応してると思うんですが…???
Softbank携帯ではUTF-8対応してることだし、今後はShift_JIS、UTF-8でいいと思います。
■PerlからUTF-8でメールを送信するサンプル
1 |
use MIME::Base64;sub sendmail { my ($mail_data) = @_; $mail_data->{'Subject'} = encode_base64($mail_data->{'Subject'}, ""); $mail_data->{'Body'} = encode_base64($mail_data->{'Body'}); $mail_data->{'Subject'} = "=?utf-8?B?". $mail_data->{'Subject'} ."?="; my $body; $body = "To: $mail_data->{'To'}n"; $body .= "From: $mail_data->{'From'}n"; if($mail_data->{'Cc'}) { $body .= "Bcc: $mail_data->{'Cc'}n"; } if($mail_data->{'Bcc'}){ $body .= "Bcc: $mail_data->{'Bcc'}n"; } $body .= "Subject: $mail_data->{'Subject'}n"; $body .= "MIME-Version: 1.0n"; $body .= "Content-type: text/plain; charset="utf-8"n"; $body .= "Content-Transfer-Encoding: base64n"; $body .= "n"; $body .= "$mail_data->{'Body'}n"; open(MAIL,"| $sendmail_path -t -i") or return; print MAIL "$bodyn"; close(MAIL);} |