- 締切済み
Perl+UTF8で文字化け
以下の環境にてメール送信プログラムを作成していますが、 ありがちな文字化け、且、ボディーが表示されない不具合が発生しています。 サーバ:linux apache レンタルサーバ ※Encode.pm、Jcode.pm無し。モジュールインストール不可。 Perl version: 5.006001 ソースエンコード:utf-8 自分の解釈としてはutf8で記述しているので、 charset=utf-8にしておけば、 MIMEエンコードさえしてやれば 表示できると考えているのですが、 やはり甘い考えなのでしょうか? また、同サイト質問NO2868794も参考にさせていただきましたが、上手くいきません。 以下ソース(エンコード:utf-8) use utf8; use MIME::Base64; use POSIX; ※アドレス表記はこのサイトの投稿チェックに引っかかるので省略します。 my $to = 'XXXX@XXXX'.XXX; my $from_nm = "送信者名"; my $from_adr = "XXXXX@XXX.XXX"; my $subject = "メール表題"; my $body = "本文"; # 送信者名を MIME エンコード encode_base64($from_nm,""); # subjectを MIME エンコード encode_base64($subject,""); $subject = "=?utf-8?B?" . $subject . "?="; # 本文を MIME エンコード encode_base64($body); my $MailPass = "XXXX/XXXX/XXX"; #SendMail Pass open(MAIL,"| $MailPass -t"); #======================================================== print MAIL <<"EOF_MAIL"; From: $from_nm<$from_adr> To: $to Subject: $subject Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 MIME-Version: 1.0 $body EOF_MAIL #======================================================== close MAIL; その他、色々ググっては見たのですが、自分ではみつけられず、 どうかアドバイスありましたらよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
> ありがちな文字化け、且、ボディーが表示されない不具合が発生しています 「ありがちな文字化け」ってどんなのですか? 「ボディーが表示されない」だけですか?送信自体されてないのですか? まず、すごく基本的なことなんですけど encode_base64 のマニュアルを良く読むことから始めてはいかがでしょうか? http://perldoc.jp/docs/modules/MIME-Base64-2.12/Base64.pod このプログラムでは、おそらく、あなたの期待通りに動作していません。 あと、いきなりメールにするのではなく my $MailPass = "/usr/bin/cat"; などして、標準出力で内容が正しいか確認するのもいいかと。
お礼
表題と同じく、送信者も同じコードを付加させることで正常に表示されるようになりました。 # 送信者名を MIME エンコード $from_nm=encode_base64($from_nm,""); $from_nm = "=?utf-8?B?" . $from_nm . "?="; # subjectを MIME エンコード $subject=encode_base64($subject,""); $subject = "=?utf-8?B?" . $subject . "?="; 有難うございました。
補足
アドバイス有難うございます。 「ありがち」と言うのは、ウェブで検索してもよく質問されているので、 「よくある質問で恐縮です」という意味で表現させて頂きました。 紛らわしい表記で申し訳ありませんでした。 メール内容としては、ヘッダ、ボディー共に送信されています。 ただ、エンコードが正常にできていないのか、メーラの方でヘッダ内文字が文字化けし、 またボディーが表示されていない状態です。 アドバイス通りよくマニュアルを良く読むと、 エンコード値はリターン値として返ってくる事に気が付き、 修正しましたらボディーが出てくるようになりました。 有難うございました。 しかしながら送信者の日本語表示部分だけ英数字で表示されており、 ここがどういう事なのかが理解できません。 「送信者名」→「6YCB5L+h6ICF5ZCN」 試しにエンコード無しで試してみましたら、 beckyでは正常に出力されましたが、 OutlookExpressだと文字化けしてしまいました。 送信者名部分はメーラによって処理が異なるのでしょうか。 何か特殊な方法を取る必要があるのでしょうか? またアドバイスありましたら宜しくお願いします。