アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://itpro.nikkeibp.co.jp/article/COLUMN/20070 …を参考に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-transitio …
<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共に正常に表示されております。

以上、よろしくお願いします。

A 回答 (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% …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご教示いただいたソースを試した所、文字化けが発生しなくなりました。
まだ詳しくは検証していませんが、疑問点1についてはこれで大丈夫なのではと思います。

このたびはどうもありがとうございました。

以上、よろしくお願いします。


PS.
疑問点2については引き続き解答を募集させていただきたいと思います。
よろしくお願いします。

お礼日時:2011/02/09 22:47

$body = mb_convert_encoding(quoted_printable_decode($pop3->getBody($n_msg)), 'UTF-8', 'ISO-2022-JP');



これでどうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご教示いただいたソースを試したのですが、現象は変わりませんでした。
試したソースは下記となりますが、ご教示いただいた記述を間違って解釈しているようでしたら、ご指摘いただければと思います。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<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>

以上、よろしくお願いします。

お礼日時:2011/02/07 22:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!