Lite.pmを使ったメールで文字化け

このQ&Aのポイント
  • 海外製のプログラムを日本語対応に修正している際、文字化け(?)が発生する。
  • UTF-8の文字コードを使用すれば文字化けは回避できるが、それが良い方法かどうか不明。
  • iso-2022-jpの文字コードを使用しても文字化けしない方法を知りたい。
回答を見る
  • ベストアンサー

Lite.pmを使ったメールで文字化け

海外製のプログラムを日本語対応に修正しているのですが「~」が文字化け(?)になります。 下記がコードの一部を抜粋したものです。 $message=jcode($message)->sjis; my $msg = MIME::Lite->new( Type =>'multipart/mixed', From =>$fromaddr, To =>"$to", Subject =>"$subject", Type => "text/plain; charset=\"iso-2022-jp\"", Data =>"$message" ); 「~」だけが文字化けします。 下記のように文字コードを UTF-8 にすると文字化けしませんが、 メールで UTF-8 を使うのは良くないのでしょうか。 $message=jcode($message)->utf8; my $msg = MIME::Lite->new( Type =>'multipart/mixed', From =>$fromaddr, To =>"$to", Subject =>"$subject", Type => "text/plain; charset=\"utf-8\"", Data =>"$message" ); これだと文字化けしません。 UFT-8 でメールを送信しても問題ないのか、 また、問題の有無に関係なく iso-2022-jp で文字化けしない方法を ご教授いただけないでしょうか。 よろしくお願い致します。

  • Perl
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.5

波ダッシュ問題という有名な問題なのでこの言葉で検索すれば詳細が得られると思います。 解決方法は色々あると思いますが、以下のように全角チルダを波ダッシュに強制変換するとか。 Perlで日本語(ISO-2022-JP)メールを送信(まとめ) http://d.hatena.ne.jp/kopug/20060903

ebo440
質問者

お礼

ありがとうございます。 有名な問題だったのですね。 大変勉強になりました。 また、紹介していただいたサイトで解決することが出来ました。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

たぶん Lite.pm は関係ないよね. 「~」を Unicode のどれに割り付けるかという問題でしょう... あれ? iso-2022-jp で送るのに sjis でいいんだっけ?

参考URL:
http://ja.wikipedia.org/wiki/Unicode
回答No.3

波ダッシュが、チルダに変換されてしまった…… 先ほど書いた、波ダッシュの件に関しては、ここを参照してください。 http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5

ebo440
質問者

お礼

ありがとうございます。 波ダッシュと読むのですね。 大変参考になりました。

回答No.2

ちょっと意味は変わりますが、同じようなのに ~ があります。 これでしたら、全機種共通だったと思います。 ですが、Windowsから出すのは大変だったと思います。 IMEパッドでは出せるのですが…… jisでも、sjisでも対応してないということですね<~が?になる あと、受信する相手にもよるのですが、 基本的にUFT-8でメール送信しても大丈夫です。

ebo440
質問者

お礼

ありがとうございます。 大変参考になりました。 > 基本的にUFT-8でメール送信しても大丈夫です。 安心しました。 「ISO-2022-JPは7ビットで表現されているため、欧米などで開発された8ビット目を無視する電子メールシステムでも問題なく使用することができる。」 という記事を見たので少し心配していました。

回答No.1

~は、機種依存文字なので、文字化けしやすい文字です。 まぁ、それは置いておいて、 utf-8で文字化けしなくて、 iso-2022-jpで文字化けする理由ですが、 $message=jcode($message)->sjis; ここを、sjisにしているからではないですか? いちど、jisにしてみてはどうでしょう?

ebo440
質問者

お礼

早速ご教授いただきありがとうござます。 > ~は、機種依存文字なので、文字化けしやすい文字です。 「~」は機種依存文字なのですね。知りませんでした。 機種依存文字ではない文字で「~」と同じ意味を表現出来る文字というのはあるのでしょうか。 > いちど、jisにしてみてはどうでしょう? 私も初めは $message=jcode($message)->jis; にしていたのですが、そうすると 「?」ではなく、「\x{ff5e}」に文字化けしてしまいます。

関連するQ&A

  • CGIでメール送信で件名文字化け

    CGIにてメールを送信しています。 Beckyや一部のWEBメーラーで見ると、本文も件名も正常表示されますが、一部のWEBメーラー(Chicappa)では件名のみ文字化けします。 例えば件名が「お問い合わせの受付」の場合 「 $B$*Ld$$9g$o$;$N<uIU (B」となります。 困っています。原因を教えてください。 ソースはutf8で保存しています。 use utf8; use MIME::Lite; use Jcode; my $msg = MIME::Lite->new( From => $mail_from, To => $mail_to, Subject => jcode("お問い合わせの受付")->jis, Type => 'multipart/mixed', ); $msg->attach( Type => 'image/jpeg', Path => "./picture.jpg", ); $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => jcode($mail_body)->jis ); $msg->send();

  • MIME::Lite ActivePerlでエラー

    MIME::Lite ActivePerlでエラー Linuxで動いたメール送信プログラムをActivePerlで動かしたところ下記のエラーになりました。 SMTP Failed to connect to mail server: Bad file descriptor 該当行はMIME::Liteでメールを送信する部分でした。 return($message->send); Windows(Activeperl)上で動かす場合なにか特別な設定が必要なのでしょうか? 以下、プログラムの抜粋です。 use Jcode; use MIME::Lite; # 値の設定 sub testmail{ $subject = jcode($subject)->mime_encode(); $data = jcode($data)->jis; $message = MIME::Lite->new( From => $mailfrom, To => $mailto, Subject => $subject, Type => 'multipart/related' ); $message->attach( Type => 'text/html; charser="iso-2022-jp"', Data => $data ); foreach(@cid){ $message->attach( Type => 'image/gif', Id => $_, Path => "./$_" ); } return($message->send); }

    • ベストアンサー
    • Perl
  • メールフォームで文字化けが出る

    http://okwave.jp/qa5038084.htmlの引き続きです。(メールフォーム) <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • MIME::LiteをSMTPで送信すると「ファイル番号が違います。」というリターンが帰って来る。

    MIME::Liteパッケージについての質問です。 現在MIME::Liteパッケージを使用してメールを転送する プログラムを作成しております。 メールは正常に送信できるのですが、MIME::Liteのsendメソッド実行後の"$!"に「ファイル番号が違います。」というメッセージが格納されます。これは何を意味しているのでしょうか?よろしくお願いします。 <コード> #!/usr/bin/perl # パッケージ指定 use Net::SMTP; use Net::POP3; use MIME::Lite; use MIME::Base64; use Jcode; # メールcfgを読み込み require "$ARGV[0]"; # メールサーバを指定 $MAILSERVER = 'hoge'; # コンテナを作成 my $msg = MIME::Lite->new( From => "$FROM", To => "$TO", cc => "$CC", Bcc => "$BCC", Subject => "$SUBJECT", Type => 'multipart/mixed' ); # メッセージを追加 $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => "$MESSAGE" ); # 添付ファイルが指定されているかチェック if (! $FILEPATH eq "" ) { # 添付ファイルが存在するかチェック if (! -e $FILEPATH ) { print "添付ファイル名:$FILEPATH\n"; exit 67; } else { # FILENAMEをGET $NUM = rindex($FILEPATH,'/'); $FILENAME = substr($FILEPATH, $NUM+1); # 添付ファイルを追加 $msg->attach( Type => 'application/octet-stream', Disposition =>'attachment', Encoding => 'Base64', Filename => "$FILENAME", Path => "$FILEPATH" ); } } # メール送信 $msg->send('smtp', $MAILSERVER); if (! "$!" eq "" ) { exit 68; } print "メールの送信が完了しました\n"; exit 0; <環境> OS:solaris 8 Perl:version 5.005_03

    • ベストアンサー
    • Perl
  • Perl 文字コードについて

    From: $from To: $mailto CC: $mailcc Subject: $subject Mime-Version: 1.0 Content-type: text/plain;charset=\"UTF-8\" Content-Transfer-Encoding: 8bit この時点で、UTF-8を指定しました。 use Encode; use Encode::Guess; Encode::Guess->set_suspects( qw/ euc-jp shiftjis 7bit-jis / ); $name = encode('UTF-8', decode('Guess', $name)); で本文を、UTF-8に変換して送るようなコードを書きました。 これで一応、パソコン、スマホ共に「本文」は文字化けせず送れるのですが、 今度、別の問題が発生してしまったようで、 「件名」が文字化けしてしまうようになりました。 $subject = encode('UTF-8', decode('cp932', $subject)); 件名も、本文と同じように変換コードをしてみたところ、パソコンでは文字化けしませんでしたが「件名」で文字化けしてしまいます。 調べたところ本文と件名では、内容が違い MIMEエンコードを使用するとのことだったのですが、 実際どのように使うのかわからないです。 $subject = encode('ISO-2022-JP', decode('cp932', $subject)); encode('MIME-Header-ISO_2022_JP', $subject) このように記述するとスマホでは文字化けしないのですが パソコンで文字化けしてしまいます。 そこで、件名がパソコンとスマホで文字化けしないようにし、本文はUTF-8で送るようにするにはどのようにすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • 文字化けメールとdat添付書類について

    windows XP でOutlook Expressを使用しています。 Outlook Expressをメーラーとしてあんまり使用したくないのですが、プロバイダーがAOLなので仕方なくOutlook Expressで受信しています。 今まで正常に仕事先からlzh添付ファイルを受信出来ていたのですが、先日添付ファイルが「・・・lzh.dat」となっていて圧縮されたデーターを解凍するとテキストデーターが文字化けで入っていました。 もう一台のPCの違うメーラーで受信しても添付ファイルは削除されているものの文字化けは同じ状態でした。 これは相手がhtml形式で送信しているからでしょうか? それとウィルスが入ってしまっているのでしょうか? ご存じの方教えてくださいませ。 下記にヘッダーに記載されたものを付けておきます。 よろしくお願いします。 From: =?iso-2022-jp?B?GyRCOzBDUjkpNkgtakBfN1cbKEI=?= <ocn.ne.jp> To: Subject: =?iso-2022-jp?B?Rnc6IBskQj9eTEw6RkF3Py4bKEI=?= Date: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2869 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 This is a multi-part message in MIME format. ------=_NextPart_ Content-Type: multipart/alternative; boundary="----=_NextPart_" ------=_NextPart_ Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit

  • メールを文字化けしないようにしたい

    次のようにメールを送信しようとしています。 Fedora CoreはUTF-8なので、jcode.plでJISに変換しようとしています。 require "jcode.pl"; $subject = "テストメール"; $data = "これはテストメールです。"; &jcode::convert(\$subject,'jis'); &jcode::convert(\$data,'jis'); @str = "subject:$subject\n\n"); push (@str, "$data\n.\n"); これがなぜかうまくいきません。メーラーの文字コードをutf8にすると正常に表示されます。 使い方が違うのかと思ったので、次のように変えてみたところ、エラーになりました。 &jcode::convert(\$subject,'utf8','jis'); また、先頭にuse utf8;を付けてみたところ、送信できたものの文字化けが余計ひどくなりました。 インターネットで検索したり本を読んでみたりしても、よくわかりませんでした。 どうやったらJISに変換できるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • mailコマンドでは化けないSubjectがPOPで受信すると文字化け

    mailコマンドで、メールのタイトル一覧を表示した時には、Subjectは文字化けしていないのですが、 POP3でメーラ(WindowsのBecky)で受信すると Subjectが文字化けしてしまいます。 ヘッダ情報は以下のようになっています。 MIME-version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit 原因は何でしょうか?

  • Perlからメール送信で文字化け

    Perl5.8からsendmailを使ってメール送信しています。 髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。 #!/usr/bin/perl require 'jcode.pl'; require 'mimew.pl'; $sendmail = '/usr/lib/sendmail'; print"Content-type: text/html\n\n test\n"; if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print OUT "To: xxxx\@hogehoge.co.jp\n"; print OUT "From: xxxx\@hogehoge.co.jp\n"; print OUT "Reply-To: xxxx\@hogehoge.co.jp\n"; $subject = "サブジェクト 髙﨑"; $subject = &mimeencode($mail_subject); print OUT "Subject: $mail_subject\n"; print OUT "Mime-version: 1.0\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n"; print OUT "Content-Transfer-Encoding: 7bit\n\n"; $honbun = "メール本文 髙﨑"; &jcode'convert(*honbun, 'jis'); print OUT "$honbun\n"; close(OUT);

    • ベストアンサー
    • Perl
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP

専門家に質問してみよう