POPメール受信時の表示について

このQ&Aのポイント
  • PHPを使ってPOP3サーバにあるメールを受信しました。メール本文で文字化けが発生する問題やHTMLメールの表示に関する疑問点があります。
  • メール本文で文字化けが発生する問題の解決方法やHTMLメールの表示方法についてアドバイスをいただきたいです。
  • YahooのWebメール上では正常に表示されるが、PHPで受信した際に文字化けやHTMLメールの表示問題が発生しています。解決策を教えてください。
回答を見る
  • ベストアンサー

POPメール受信時の表示について

http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280400/を参考にPOP3サーバにあるメールをPHPを使って受信しました。 そうした所、2点疑問点があったのですが、どのようにすれば解決できるのかわからなかったので、 アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 1. メールの本文で文字が?になってしまう事があるのですが、どのようにすれば正しく表示されるかがわかりませんでした。 なお、この現象が発生するのは、はしごだか、丸上、丸20、ローマ数字の1、1文字のミリなどとなります。 ■送信時のメール本文 はしごだか(髙) うえ(上) 二十(20) 一I ミリミリ ■受信結果 [本文] はしごだか(?) うえ? 二十? 一? ミリ? 2. HTMLメールを受信時、タグ?のようなものが表示されるのですが、どうすれば普通のメーラーのようにHTMLメールの中身が表示されるかがわかりませんでした。 ■受信結果 [本文] --0016(以下略) Content-Type: multipart/alternative; boundary=0016(以下略) --0016(以下略) Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit *はしごだか(?)* *うえ?* *二十?* 一? ミリ? [image: Blue hills.jpg] --0016(以下略) Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: base64 以下略 --0016(以下略)-- --0016(以下略) Content-Type: image/jpeg; name="Blue hills.jpg" Content-Transfer-Encoding: base64 Content-ID: <***> X-Attachment-Id: *** (以下略) --0016(以下略)-- なお、使用したソースは下記となります(host, username, passwordは使用するPOP3サーバにあわせる必要があります)。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>メール受信</title> </head> <body> <?php require_once('Net/POP3.php'); $account = array( 'host' => 'pop.mail.yahoo.co.jp', 'port' => '110', 'username' => 'ユーザ名', 'password' => 'パスワード', ); $pop3 =& new Net_POP3(); $pop3->connect($account['host'], $account['port']); $pop3->login($account['username'], $account['password']); $n_msg = $pop3->numMsg(); $body = mb_convert_encoding($pop3->getBody($n_msg), "utf-8", "jis"); $body = htmlspecialchars($body, ENT_QUOTES, "utf-8"); $pop3->disconnect(); ?> <p>[本文]</p> <pre> <p><?php echo $body; ?></p> </pre> </body> </html> なお、私はYahooのWebメール上で受信したメールを表示して試しましたが、YahooのWebメール上では、1,2共に正常に表示されております。 以上、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
noname#243182
noname#243182
回答No.2

SJIS-win 経由でどうでしょうか。 mb_convert_encoding(mb_convert_encoding(quoted_printable_decode($pop3->getBody($n_msg)), 'SJIS-win', 'ISO-2022-JP'), 'UTF-8', 'SJIS-win');

参考URL:
http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932
iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースを試した所、文字化けが発生しなくなりました。 まだ詳しくは検証していませんが、疑問点1についてはこれで大丈夫なのではと思います。 このたびはどうもありがとうございました。 以上、よろしくお願いします。 PS. 疑問点2については引き続き解答を募集させていただきたいと思います。 よろしくお願いします。

その他の回答 (1)

noname#243182
noname#243182
回答No.1

$body = mb_convert_encoding(quoted_printable_decode($pop3->getBody($n_msg)), 'UTF-8', 'ISO-2022-JP'); これでどうでしょうか。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースを試したのですが、現象は変わりませんでした。 試したソースは下記となりますが、ご教示いただいた記述を間違って解釈しているようでしたら、ご指摘いただければと思います。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>メール受信</title> </head> <body> <?php require_once('Net/POP3.php'); $account = array( 'host' => 'pop.mail.yahoo.co.jp', 'port' => '110', 'username' => 'ユーザ名', 'password' => 'パスワード', ); $pop3 =& new Net_POP3(); $pop3->connect($account['host'], $account['port']); $pop3->login($account['username'], $account['password']); $n_msg = $pop3->numMsg(); $body = mb_convert_encoding(quoted_printable_decode($pop3->getBody($n_msg)), 'UTF-8', 'ISO-2022-JP'); $body = htmlspecialchars($body, ENT_QUOTES, "utf-8"); $pop3->disconnect(); ?> <p>[本文]</p> <pre> <p><?php echo $body; ?></p> </pre> </body> </html> 以上、よろしくお願いします。

関連するQ&A

  • 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 原因は何でしょうか?

  • PEAR--Net_POP3。phpで受信メールの表示

    初めて質問します。 ものすごい初心者ですので、すごい簡単な返答をお願いします。 環境は自分で作ったサーバです。 Lunux centos PEAR Net_POP3 インストール済み(確認済) utf-8 PEARのライブラリで、Net_POP3を使用し、phpで、書いてみたのですが、私が参照したページの見本より、作成したPHPでは、動かないのです。何がいけないのでしょうか? 下記の様にPHPを記入して、サーバ接続は、ドメインを書き換えると接続できなく、しっかり記入すると、接続可能です。 ですが、ログイン部分は、パスワードをわざと間違えて記入しても、ログイン可能と表示されてしまいます。 ログイン部分がおかしいのか。それとも、エンコードの部分もおかしいのか、わかりません!みなさんのお力添えを!! <?php require_once('Net/POP3.php'); $account = array( 'host' => 'mail.私のドメイン', 'port' => '110', 'username' => 'メールアカウント', 'password' => 'メールパスワード', ); $pop3 =& new Net_POP3(); if($pop3->connect($account['host'], $account['port'],LOGIN)){ echo "接続OK!<br>"; }else{ echo "接続NGNGNG!<br>"; } if($pop3->login($account['username'], $account['password'],LOGIN)){ echo "接続OK!<br>"; }else{ echo "接続NGNGNG!<br>"; } $n_msg = $pop3->numMsg(); $header_list = $pop3->getParsedHeaders($n_msg); $body = mb_convert_encoding($pop3->getBody($n_msg), "utf-8", "jis"); $body = htmlspecialchars($body, ENT_QUOTES, "utf-8"); $pop3->disconnect(); echo "<dl>"; echo "<dt>差出人</dt><dd>".mb_decode_mimeheader($header_list['From'])." </dd>"; echo "<dt>件名</dt><dd>".mb_decode_mimeheader($header_list['Subject'])." </dd>"; echo "<dt>本文</dt><dd><pre>".$body."</pre></dd>"; echo "</dl>"; ?>

    • 締切済み
    • PHP
  • PHPでメール受信時にVISTAからだと、文字化けします。

    WEBでPHPを使って、メールを受信しています。 どうしてもVISTAのWindowsメールから来た物だけ文字化けします。 subjectは文字化けしません、本文だけです。 解決の糸口も見つかりません、宜しくお願いいたします。 mb_detect_encoding()で見てみると、[ASCII] になっています。 PHP Version 5.1.6で運用しています。 以下、ソースです。 mb_language("Japanese"); mb_internal_encoding("UTF-8"); /* POP3 サーバと接続 */ $mbox = @imap_open("{" . $mailserver . ":110/pop3/notls}INBOX", "username", "passwd"); if ($mbox && $i > 0) { $head = imap_header($mbox, $i); /* 本文のテキスト部分だけ */ $body = imap_fetchbody($mbox, $i,1); echo htmlspecialchars(mb_decode_mimeheader($head->subject)); echo htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); echo htmlspecialchars(mb_convert_encoding($body, mb_internal_encoding(),mb_detect_encoding($body))); imap_close($mbox);

    • 締切済み
    • PHP
  • POP3を使ったメール受信で文字化け

    WindowsでPHP5を使用しWeb上で新着メールの受信を確認するプログラムを作成しています。 受信プロトコルにはPOP3を使用しているのですが、POP3二接続し、メールをWeb上で表示させようとすると文字化けが起こってしまいます。 以下のプログラムなのですが、どこか間違っているでしょうか。よろしくお願いします。 <?php session_start(); $mailserver = $_SESSION['mailserver']; $user = $_SESSION["user"]; $pass = $_SESSION["pass"]; $i = $_GET['i']; ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> </head> <body bgcolor="#ffffff"> <center> <?php /* POP3 サーバと接続 */ $mbox = @imap_open("{" . $mailserver . ":110/pop3}INBOX", "$user", "$pass"); if ($mbox && $i > 0) { $head = imap_header($mbox, $i); $body = imap_body($mbox, $i, FT_INTERNAL); echo htmlspecialchars(mb_decode_mimeheader($head->subject)); ?> <HR> <UL> <LI>Date:<?php echo htmlspecialchars(mb_decode_mimeheader($head->date)); ?> <LI>From:<?php echo htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); ?></TD> </UL> <HR> <PRE><?php echo htmlspecialchars( mb_convert_encoding($body, mb_internal_encoding(), mb_detect_encoding($body))); ?></PRE> <?php imap_close($mbox); } else { /* 認証の失敗 */ print("認証エラー<BR>\n"); } ?> </center> </body> </html>

    • 締切済み
    • PHP
  • Advanced/W-ZERO3[es]のメール

    この度、Advanced/W-ZERO3[es]購入しました。 と言うのも、受信するメールのが Content-Transfer-Encoding: base64 で送られてくるメールがあり、これを表示する必要があったために機種変更しました。 が、今回受信しても文字化けを起こします。。。 Content-Transfer-Encoding: base64 のメールはこの機種を使っても正常に表示できないのでしょうか。 また、メールソフトはW-zero3メール とoutlookがありますが、ウィルコムアカウント以外のアカウントをどちらにも設定できるようですが、どちらがどう違うのかわかりません。 どなたかお分かりになりますでしょうか。 よろしくお願い致します。

  • XHTML のタイトルが表示されません ご教授おね

    タイトル通りなのですがHTML のタイトルが上手く表示されず、本文の中に入ってしまっています。(cf,添付画像)   一番最初の所で躓いてしまいました、解説書の通り何度もやり直したのですが、原因が分からないのです・・・かなり初歩的なこととは思われますがよろしくお願いいたします! ソースは以下のとおりです。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <titile>a</title> <style type="text/css"> </style> </head> <body> </body> </html> *ちなみにサンプルでは以下のとおりになっています。(サンプルをインストールすればしっかりと表示されるのです、同じなはずなのに僕が入力しますと上手くいきません) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>a</title> <style type="text/css"> </style> </head> <body> </body> </html>

    • ベストアンサー
    • CSS
  • GメールPOP3受信について

    会社で使用しているグループウェアーのメールをGmailに設定し受信しておりましたが、G mailのアカウントを2個にして同じくPOP3を設定したところ、一部のメールは受信できるのに受信できないメールがあります。アカウントが一つの時は問題はなかったのですが、メールが受信できなくて困っております。  なにとぞご教授お願いします。

  • 受信メールPOPが変わってしまう

    初心者です。OEを使っています。(プロバイダはyahoo)受信すると何度も同じメールが受信されてしまうのです。アカウントのプロパティをみると受信メール(POP3)の項目のところが最初に設定したものではんく、XXX.0.0.X(Xは数字)に勝手に変わってしまっているのです。なにか関係はありますか?

  • Shift_JISのことろをすべてsjisに

    しても大丈夫でしょうか? たとえば以下のように書いて大丈夫でしょうか? 本来どのように書くべきでしょうか? <?xml version="1.0" encoding="sjis"?>のsjisと <meta http-equiv="content-type" content="application/xhtml+xml; charset=sjis"/> のsjisの2箇所です。 <?xml version="1.0" encoding="sjis"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=sjis"/> <meta http-equiv="content-style-type" content="text/css"/> <meta http-equiv="content-script-type" content="text/javascript"/> <title>sjis</title> </head> <body> <p>これは文字化けのテストです</p> </body> </html>

    • ベストアンサー
    • HTML
  • PHPフォームからメールを受信した時に文字化けが発生

    申し込みフォームから受信したメールが、文字化けします。 windowsではちゃんと表示されるのですが、macでは文字化けします。 更に、必ずはじめに以下の文面が記載されてきます。 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 困ってます!!宜しくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう