• 締切済み

PEAR::Mailでエンコードの指定はどうすれば

 PEAR::Mailを使ったメールフォームを作りました。  一般的なUTF-8ではなく、事情があってISO-2022-JP-MSに変換して送ってるもんですから、メーラーによっては文字化けしてしまうようです。  で、メールのヘッダで文字コードを指定してやれば上手くいくみたいな話を教えていただきまして、その方法を探っております。  PHPで作ってるんですが、PHPに用意されてる関mail関数だと参考になるサイトが見つかるんですが、PEAR::Mailでのヘッダで指定する方法がいまいちみつからず、困っている次第です。  そもそもISO-2022-JP-MS自体が特殊なようで、これをこのまま指定しても良いものなのかとか。  shift-jisとして指定する?  その辺も含めてお分かりになる方、よろしくお願いいたします。

noname#235729
noname#235729
  • PHP
  • 回答数2
  • ありがとう数4

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>一般的なUTF-8ではなく、事情があってISO-2022-JP-MSに変換して送って >るもんですから、メーラーによっては文字化けしてしまうようです。 mb_language('ja')を指定してmb_send_mail()を使えばiso-2022-jpに変換されることでもわかるとおり、日本語のメールで「一般的」なのはiso-2022-jpです。 iso-2022-jpであれば、pear::mailのNoteにサンプルがあります(Note by: burak a.t toruko d.o.t com 2008-04-20 07:37 UTC)。 http://pear.php.net/manual/ja/package.mail.mail.send.php 基本的に配列の添え字がヘッダ項目名になるだけです。メールヘッダの組み立て方自体は理解されていますよね(これがわからないなら手を出すべきではない)。 なおiso-2022-jp-msはメールに使う文字セットとしては規定されていません。送るのは自由ですが、受取り側でキチンと(質問者さんがiso-2022-jp-msにしてまで送りたい特殊な文字を)認識できる可能性は高くはないでしょう。メールフォーム側でiso-2022-jpの範囲外の文字があったら再入力させる方が無難だと思います。 #管理者(自分)宛の連絡用フォームなら(自分のメーラがutf-8対応なら) #utf-8でいいんですけどね(汗

noname#235729
質問者

お礼

 お礼が遅くなり大変申し訳ございません。  ご回答ありがとうございました。

noname#212058
noname#212058
回答No.1

サンプルありました。PEAR::Mail_mime を導入する必要があるようですが。 http://phpintroduction.seesaa.net/article/264360153.html メールは送り先のメーラーが対応しているエンコードしか使用できません。通常は UTF-8 を、UTF-8 が使えないような古いメーラーがある場合は ISO-2022-JP を使います。shift-jis に対応しているメーラーはかなり少数派なのでお勧めしません。 上記のサンプルは ISO-2022-JP-MS でエンコードして「ISO-2022-JP だよ」と指定して送っていますが、送り先のメーラが ISO-2022-JP-MS に対応していなければ、本文中の機種依存文字は文字化けします。それは「仕方がないもの」として考える必要があります。

noname#235729
質問者

お礼

 お礼が遅くなり大変申し訳ございません。  ご回答ありがとうございました。

関連するQ&A

  • VS2005C#でメールを受信すると文字化け

    VS2005C#でメールを受信するときに文字コードをiso-2022-jpで変換し、 大抵のメールはこれでOKなのですが、 たまに文字化けしてしまうメールがあります。 しかし普通のメーラーで見ると文字化けせずに見えます。 ヘッダにもiso-2022-jpと書かれています。 C#で受信したときに文字化けしてしまう理由は何かあるのでしょうか? バイトが欠損しているからでしょうか? (そうなら普通のメーラーでも文字化けすると思うのですが)

  • メールのコーディングは

    何でしょうか? JIS,SHIFT_JIS,UTF-8,EUC-JP のどれでしょうか? PHPからメールを送りたいのですが文字化けを防ぐためにどのコードで送ったらいいのかわかりません

  • ISO-2022-JP-MSに変換してるのに文字化

     PHPでメールフォームを作って使ってもらってます。  メールフォームページのHTMLでの文字コートの指定はUTF-8ですが、(1)とかの一部の文字化けを防ぐ為に「ISO-2022-JP-MS」に変換する方が良いと聞いたもので、この文字コードに変換して送られるようにしています。  ところが一部の環境の人には、文字のいくつかではなく、文章全体が文字化けした状態で届くという話が挙がっています。  考えられる原因は何があるでしょうか?  メーラーの設定を変更することで読めるようになる場合もあるようですが、それはそれでメーラーが間違った文字コードを指定してしまう原因が分かりません。  考えられる原因と解決方法があれば、よろしくお願いいたします。  ちなみに最近、ご利用の方で文字化けした人は@outlook.jpのドメインのメールアドレスで受けたようです。  ネットで検索すると、Outlookのバージョンによっては文字化けするという話もあるようですが、その人の環境はiPhoneのようなのでOutlookメーラーは使ってないと思います。  これらも何か関係があるのでしょうか?

    • ベストアンサー
    • PHP
  • PEAR の Mail/Queue.php で文字化け。

    タイトル通り、文字化けが解消できません。 いつも他の事は全てUTF-8 でやっているのですが メールは [ISO-2022-JP] を使わないといけないみたいですね。 PEAR を使わないで [mb_send_mail] を使っていた時は何もトラブルは無かったのですが。 以下、長いですが宜しくお願いいたします。 CENTOS 5 Mysql 5.0.45 MySQL の文字セット: UTF-8 Unicode (utf8) PHP 5.0 PEAR 以下の通りで運用しています。 DB 1.7.13 stable Mail 1.1.14 stable Mail_Mime 1.5.2 stable Mail_Queue 1.2.2 stable Mail_mimeDecode 1.5.0 stable PEAR 1.4.9 stable メールを複数人に送る為に [Mail/Queue.php] を 利用しようとしています。 (ほぼ、サンプルで公開しているものをそのまま使わせてもらっています。) http://php.atpedia.jp/pear/ja/package.mail.mail-queue.mail-queue.tutorial.html メールを作成するPHPは、[UTF-8] にしています。 メールをデータベースに入れるときに [ISO-2022-JP] に変換しています。 取り出して送信する時にも変換しなくてはいけないのか? 初めてPEARを使うのもあって、動作自体が良く分からない為 文字化けに対処できずにいます。 お分かりになる方、宜しくお願いいたします。 キューに入力前に本文作成用ページ このページは、UTF-8 です。 $subject $message 送信対象のID をこのページから下のページに [POST] で送信 キューに入力用ページ *サンプルを元に <?php mb_language("Ja"); mb_internal_encoding("utf8"); include './config.php'; /* db_options と mail_options をここで使用する */ $mail_queue =& new Mail_Queue($db_options, $mail_options); /*-----PEARでデータベースに接続しているが理解できないので、再度接続。。 ココから---------*/ require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); mysql_query('set character set utf8'); /*----------------------------------データベースに接続 ココまで----------------------------*/ /*----------------------------------この変換のタイミングがおかしいのでしょうか?-----------------*/ $subject = mb_encode_mimeheader($subject,'ISO-2022-JP'); $message = mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); /*----------------------------------ここまで変換-----------------------------*/ $sql = "SELECT * FROM member WHERE **************"; $rst = mysql_query($sql, $con); //件数を数える $recmax = mysql_num_rows($rst); //ループでID、名前、メールアドレスを取り出す while($rows = mysql_fetch_array($rst)){ $id = $rows["customerID"]; $name = $rows["name"]; $mail = $rows["mail"]; $from = '***@*******.net'; $to = $mail; $hdrs = array( 'From' => $from, 'To' => $to, 'Subject' => $subject ); /* 有効なメールを構築するため、Mail_mime() を使用する */ $mime =& new Mail_mime(); //文字コード変換する $mime->setTXTBody($message); $body = $mime->get(); $hdrs = $mime->headers($hdrs); /* メッセージをキューに追加する */ $mail_queue->put( $from, $to, $hdrs, $body ); } $con = mysql_close($con); ?> 送信用ファイル *サンプルそのまま <?php include './config.php'; /* スクリプトがコールされるたびに何通のメールを送信するか */ $max_amount_mails = 50; /* 設定から db_options と mail_options を再び使用する */ $mail_queue =& new Mail_Queue($db_options, $mail_options); /* メッセージを実際に送信する */ $mail_queue->sendMailsInQueue($max_amount_mails); ?>

    • ベストアンサー
    • PHP
  • UTF-8でのメール送信の問題点

    メール送信のシステムをPerlで作っています。 文字コードUTF-8で送信しようと思っていますが、UTF-8の場合の問題点を教えてください。 自分で調べた限りでは、昔は対応していないメーラーだと文字化けしていたが、今は対応していないメーラーはないので、大丈夫、という認識です。 しかしながら、大手のAmazonやYahoo!、プロバイダや銀行などから飛んでくるメールは、ほとんど全てがISO-2022-JPで飛んできます。 自分が知っている限り、UTF-8を使用しているところはありません。 なので、UTF-8でメール送信することに不安を感じています。 AmazonやYahoo!は、UTF-8だと何か問題があったので、あえてISO-2022-JPを使っているのでしょうか? ISO-2022-JPだと 髙 などが文字化けするはずなのですが、髙→高に変換してメール送信しているのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTMLでどうしても文字化け(エンコード指定がなぜか反映されない)

    HTMLでどうしても文字化け(エンコード指定がなぜか反映されない) こんにちわ、私が所属しているところは例年活動の発表ページを作成して、今年は私が作成担当になっています。 去年先輩が作ったものを参考に作っているのですがサーバに上げて見たところエンコードがおかしいのかどうしても文字化けしてしまいます。 以下に詳しい症状を箇条書きします。どなたか知恵を貸してくださる方、よろしくお願いします。 自スペック:WindowsVista:FireFox3.6.9 サーバの設定:エンコードはutf-8で統一されている(去年のページもすべてutf-8でした) 症状:去年と同様にcssでもhtmlでもutf-8を文字エンコードに指定しているが文字化け、ブラウザのエンコードをshift_jisに変えると直る ↓ 指定エンコードをshift_jisに変えてみるがなぜかutf-8で表示される ↓ ソースをterapadでutf-8に変換してみてからソースを上げなおしてみる ↓ やっぱりエンコードをshift_jisに変えないと文字化けが直らない 去年のページではutf-8で問題なく表示されており、指定コードの周辺は変えていないのでなぜ文字化けするかが不明です。 日本語のエンコードは普通shift_jisであってutf-8ではないですよね? 去年のページがなぜutf-8でも普通に表示されているのか、それがなぜほとんど同じ構成の自分が作ったページではできないのか、知恵をお貸しください。

    • ベストアンサー
    • HTML
  • エンコード変更のしやすいMACメーラー

    私の属する、私的なメーリングリストのMAC BOOKユーザーの方(Aさん)が、MAC付属のメーラーを使っています。 ヘッダをみると X-Mailer: Apple Mail (2.1077) となっています。 通常のメール送信は問題ないですが、メール返信で、次のようなことが起こります。 (1)エンコードを「自動」 (2)Outlook Express からの iso-2022-jp のメールに返信 (3)受信した(2)の返信メールはutf-8 (4)Outlook Express で受信   メール本文が見えません。本文白紙状態です。 (5)Windows Live Mail で受信   問題ありません。 (6)携帯では、 utf-8 非対応の機種は、文字化け MACのサポート(電話)に問い合わせたところ、 「エンコードを iso-2022-jp にしてください。」といわれました。 Aさんは、公私ともに、海外へもメールすることが多く、基本設定を iso にするわけにはいかないと答えると、 「通常『自動』にしておいて、「メール送信する度に、iso と 自動 を切り替えてください」とサポートに言われました。 メール量が多いAさんは、メール送信の度にエンコードを切り替えるというのは大変なので、エンコードの切り替えが楽なMACのメーラーを検討しています。 相談された私は、Windows しか使っていませんので、どんなメーラーがあるかもわかりません。エンコード切り替えの楽なメーラーを教えていただけないでしょうか?

    • ベストアンサー
    • Mac
  • ThunderBird1.5.0.4で受信メールのエンコード

    メールソフトThunderBird1.5.0.4を使っています。 エンコード設定で、受信メールの場合は、通常日本語(ISO-2022-JP)を使っていますが、この設定の場合… 「メール本文」が通常「差出人」が文字化け (日本語SHIFT-JIS)の場合… 「メール本文」が文字化け「差出人」が通常 (日本語EUC-JP)の場合… 「メール本文」が文字化け「差出人」が文字化け と言う、不可解な状態になってしまいます。 ツール-オプション-表示-フォントの設定 エンコーディング 受信メール:ISO-2022-JP 送信メール:EUC-JP 「すべての受信メッセージに規定の文字エンコーディングを適用する」 「返信メッセージに規定の文字エンコーディングを適用する」 上記二つのチェックボックスはオフになっています。 どこの設定を変えれば 「メール本文」が通常「差出人」が通常(つまり文字化けしない)になりますか? いろいろやってみましたが、どうもうまくいきません。 よろしくお願いいたします。

  • PHP の mb_send_mail で HTMLメール送信

    mb_send_mailでHTMLメールを送信すると 受信メールのヘッダ情報が勝手に追加されてしまいます。 【PHP内で指定しているヘッダ】 $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-2022-jp' . "\r\nX-Mailer: PHP/".phpversion(); 【受信メールのヘッダ情報】 Mime-Version: 1.0 Mime-Version: 1.0 Content-Type: text/html; charset=iso-2022-jp Content-Type: text/plain; charset=ISO-2022-JP というように、指定もしてないContent-Type: text/plainが 追加されたり、Receivedも同じように勝手に追加されてしまいます。 考えられる原因を教えていただけますか?

    • ベストアンサー
    • PHP
  • php自動返信メール本文の一部の文字化け

    phpでメールフォームを作成したのですが、自動返信のときの本文の一部が文字化けしてしまいます。 全体が文字化けではなくて一部で、どう対処していいかわからないです。 すいませんがお教えいただけないでしょうか? フォームもphpも文字コードEUCです。 文字化けする本文は 「本メールの最下段にお控えが記載してございます。」 という部分です。 メール送信部分のソースは $rebody=mb_convert_encoding($rebody,"JIS","EUC-JP"); if (get_magic_quotes_gpc()) { $rebody = stripslashes($rebody); } $resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","EUC-JP"))."?="; $reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); です。 今悩んでて3時間ぐらいいろいろ試したのですがダメでした。 すいませんがよろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう