- ベストアンサー
Perlでメール送信プログラムの文字化け問題について
- Perlで作成したメール送信プログラムで、自宅環境からのテストでは正常に送信できますが、会社の環境では文字化けが発生してしまいます。
- 自宅環境ではYahoo!やBiglobeのメールアドレス宛に送信できる一方、会社環境では自社で構築したqmailのメールサーバに送信しようとしています。
- 送信するメールの内容には日本語の文字コードiso-2022-jpが使用されており、特に「あいうえお」の部分が文字化けして表示されます。解決策をご教示いただける方はいらっしゃいますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
subject は、ISO-2022-JP に変換した上で base64 でエンコードしましょう。 参考 : http://perltips.twinkle.cc/perl/encode_jis_subject.php 本文も ISO-2022-JP に変換するのが無難です。 $StringBuffer に入っている本文の文字コードは何でしょうか。 EUC-JP だとすると $smtp->datasend(encode('ISO-2022-JP', decode('EUC-JP', $StringBuffer))); となるのかな。 参考 : http://hikoboshi.org/perl/doc/encode.html
その他の回答 (3)
- DIooggooID
- ベストアンサー率27% (1730/6405)
文字化けが起きるのは、Subjectの部分だけではないですか?
補足
本文のほうの文字化けが主です。
- DIooggooID
- ベストアンサー率27% (1730/6405)
お礼
$smtp->mail($mailaddress); $smtp->to($mailaddress); $date = &date; $smtp->data(); $smtp->datasend("Date:$date\n"); $smtp->datasend("From:$mailaddress\n"); $smtp->datasend("To:$mailaddress\n"); $smtp->datasend("Subject:Software制作依頼\n"); $smtp->datasend("Content-Transfer-Encoding: 7bit\n"); $smtp->datasend("Content-Type: text/plain;charset=\"euc-jp\"\n\n"); $smtp->datasend("\n"); $smtp->datasend(encode("euc-jp", $StringBuffer)."\n"); $smtp->dataend(); $smtp->quit; コードをこんな感じに直しましたが、文字化けしてしまいます。 あいうえお → ???臓単?総蔵丹?総蔵・?臓俗?B こんな感じです。
補足
Linux の文字コードの設定は、EUC-JP でした。
- SAYKA
- ベストアンサー率34% (944/2776)
Subjectの文字コードに関する資料を探したら良いよ。 簡単に言うと会社のサーバ(sendmailかな?)は他と違う文字コードが基準で駆動してるだけ。
補足
会社のメールサーバは、qmail のようです。 サーバは、Linux なのですが、基準の文字コードの調べ方はわかりますか?
お礼
ありがとうございます! うまくいきました! やっぱり、基本が理解できてないとだめですね。。。。 勉強になりました!