• 締切済み

Net_POP3 メール一覧のソート

Net_POP3を使用してメールの閲覧を作成しています。 現在は日付の古いものから新しいものへと表示されています。 これを日付の新しいものから古いものへと表示をさせたいのですが、sortがうまくできず困っています。 ご存知の方がいらっしゃいましたらご教示お願いします。 ソースは下記になります。 $count = $pop3->numMsg(); if ($count) { $count = $pop3->getListing(); $start = 1; $end = 21; if ($count !== false) { foreach ($count as $key => $value) { if($start < $end) { $overview = $pop3->getParsedHeaders($start); $body = $pop3->getBody($start); $from = mb_decode_mimeheader($overview['From']); $from = mb_convert_encoding($from, "UTF-8", "JIS"); $subject = mb_decode_mimeheader($overview['Subject']); $subject = mb_convert_encoding($subject, "UTF-8", "ISO-2022-JP"); $subject = mb_strimwidth($subject, 0, 42, "...",'UTF8'); $date = mb_decode_mimeheader($overview['Date']); $body = nl2br($body); $maillist .= '<tr>'."\n"; $maillist .= '<td>'.$subject.'</td>'."\n"; $maillist .= '<td>' .$from. '</td>'."\n"; $maillist .= '<td>' .date('Y/m/d H:i:s',strtotime($date)). '</td>'."\n"; $maillist .= '</tr>'."\n"; $start++; } } } } 宜しくお願いします。

  • h-h13
  • お礼率24% (37/149)
  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

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

何のためにforeachを使っているのか読み取れません($keyも$valueも使っていませんよね)。 $count = $pop3->numMsg(); でメッセージ件数を取得したら、そのまま $dispcnt = 0; // 表示カウンタ $dispmax = 20; // 最大表示数 $msgid = $count; // メッセージID(最新からカウントダウン) while($msgid >= 1) { if (++$dispcnt >= $dispmax) { break; } $overview = $pop3->getParsedHeaders($msgid); $body = $pop3->getBody($msgid); // メール内容を表示 $msgid--; } などとすればいいのでは?

関連するQ&A

  • 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
  • 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
  • メールの件名のデコード

    お世話になります。 メールの件名が「登録」のもののみ、以降の処理をしようとしています。 $n_msg = $pop3->numMsg(); $header_list = $pop3->getParsedHeaders($n_msg); $subject = mb_decode_mimeheader($header_list['Subject']); print "$subject<br>"; としても「??」と表示され、 「登録」に戻りません。 if($subject <> "登録") なら、対象外とするという処理に したいのですが、どうすればいいでしょうか? ちなみに、、 $header_list['Subject']は、 =?iso-2022-jp?B?GyRCRVBPPxsoQg==?= です。 よろしくお願いします。

    • 締切済み
    • 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
  • mb_send_mail で一部文字化けします

    mb_send_mail で一部文字化けします。 URLやキーワードとかそういった文字をいれた変数です。 基本UTF8で作ってます。 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $subject = "てすと"; $to =$email; $header .= "From:admin@example.jp\n"; $header .= "Return-Path:admin@example.jp\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= "◆URL:"; $body .= $url[$count]; mb_send_mail($to,$subject,$body,$header);

    • 締切済み
    • PHP
  • PHPから携帯へメール送信

    いつもお世話になっております。 PHPから携帯電話へ"絵文字付き"でメールを送るプログラムを作成している のですが、『base64_encode』等を使用して絵文字の表示までは行う事がで きました。 ですが、本文が途中で途切れてしまうのです・・・。 PHP側は、 $to = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), 'SJIS', 'ISO-2022-JP'); $subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), 'SJIS', 'ISO-2022-JP'); (省略)  ・  ・ $body = $structure->body; $body = preg_replace('/\s*>\s.*/', '', $body); $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); //---------------------------------- // base64_encode //---------------------------------- $subject = "=?shift_jis?B?" . base64_encode($subject) . "?="; $body = base64_encode($body); //---------------------------------- // ヘッダを作成 //---------------------------------- $headers = "From: test@mail.com\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=Shift-JIS\n"; $headers .= "Content-Transfer-Encoding: base64"; //---------------------------------- // メール送信 //---------------------------------- $res = mail($to, $subject, $body, $headers);  ・  ・ (省略) 上記のように記述しています。 メールは送れます。絵文字も表示されます。ですが、本文が途中で途切れ てしまいます。 どなたかご教授をお願い致します。

    • ベストアンサー
    • PHP
  • Mail_mimeDecodeでメール本文取得

    index.php <form action="mailto:info@hoge.com" method="get" id="join"> <input type="hidden" name="body" value="<?php echo $friend;?>" /> </center></form> empty_mail.php $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); $params['crlf'] = "\r\n"; $mail_data = Mail_mimeDecode::decode($params); $MailBody = getbody($mail_data); if (!$MailBody) { print "cannot get MailBody"; // エラー処理 }// $MailBodyを使った処理 function getbody($arg) { if ($arg->ctype_primary == 'multipart') { foreach($arg->parts as $parts) { $ret = getbody($parts); if ($ret) { return $ret; } } } if ($arg->ctype_primary == 'text') { if ($arg->ctype_secondary == 'plain') { if (strtolower($arg->ctype_parameters['charset']) == 'iso-2022-jp') { return mb_convert_encoding($arg->body, "UTF-8", 'JIS'); } else { return $arg->body; } } } return false; } //メールを解析する $decoder = new Mail_mimeDecode($source); $structure = $decoder->decode($params); //送信元を取得する $mail = $structure->headers['from']; $mail = addslashes($mail); $mail = str_replace('"','',$mail); $from = $structure -> headers['from']; $from = mb_decode_mimeheader($from); $from = mb_convert_encoding($from, mb_internal_encoding(),'auto'); if(preg_match( '/<(.*?)>$/' , $from , $match)){ $from = $match[1]; } $from = trim($from); $from = strtolower($from); //送信データを設定する $recipients = $from; $new_from = 'info@hoge.com'; mb_language('ja'); mb_internal_encoding('sjis'); $subject = mb_encode_mimeheader(mb_convert_encoding("登録URL", "JIS", "auto"), "JIS"); $body = "下記のURLをクリックして登録を行ってください http://hoge/hoge.php?". $MailBody . "". session_name()."=". htmlspecialchars(session_id()); と$friendを登録フォーム画面にいくまで情報を維持したいのですが、ご教授お願いします。

    • ベストアンサー
    • PHP
  • 自動返信でのMail_mimeDecode

    //メールソースを読み込む $source = file_get_contents("php://stdin"); if(!$source){ exit(); } $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); $params['crlf'] = "\r\n"; $mail_data = Mail_mimeDecode::decode($params); $MailBody = getbody($mail_data); if (!$MailBody) { print "cannot get MailBody"; // エラー処理 }// $MailBodyを使った処理 function getbody($arg) { if ($arg->ctype_primary == 'multipart') { foreach($arg->parts as $parts) { $ret = getbody($parts); if ($ret) { return $ret; } } } if ($arg->ctype_primary == 'text') { if ($arg->ctype_secondary == 'plain') { if (strtolower($arg->ctype_parameters['charset']) == 'iso-2022-jp') { return mb_convert_encoding($arg->body, "UTF-8", 'JIS'); } else { return $arg->body; } } } return false; } //メールを解析する $decoder = new Mail_mimeDecode($source); $structure = $decoder->decode($params); //送信元を取得する $mail = $structure->headers['from']; $mail = addslashes($mail); $mail = str_replace('"','',$mail); $from = $structure -> headers['from']; $from = mb_decode_mimeheader($from); $from = mb_convert_encoding($from, mb_internal_encoding(),'auto'); if(preg_match( '/<(.*?)>$/' , $from , $match)){ $from = $match[1]; } $from = trim($from); $from = strtolower($from); //送信データを設定する $recipients = $from; $new_from = 'get@hoge.com'; mb_language('ja'); mb_internal_encoding('sjis'); $subject = mb_encode_mimeheader(mb_convert_encoding("登録URL", "JIS", "auto"), "JIS"); $body = "下記のURLをクリックして登録を行ってください http://hoge.com/regist.php?". $MailBody . "". session_name()."=". htmlspecialchars(session_id()); とメールを自分のHPに送る際に本文にデータがあるのですが、そのデータを取り出し登録URLに付加し、情報を維持させたいのですが、上記のソースですと$MailBodyに情報がはいっていません。ベテランさん!ご指導、ご教授お願い致します

    • ベストアンサー
    • PHP
  • phpで携帯へのメルマガ配送について

    データベースから特定メアドを引き出しループで送信処理をしています。 ドメイン許可してもDocomoあてが届かない現象があり なにかうまい配送方法はないでしょうか? コードは以下です。 $sql = "select * from master where mailpermission = '$mp'"; $rs = mysql_query($sql,$con); while($row=mysql_fetch_array($rs)) { $toad =$row[7]; $name=$row[2]; $kanrino=$row[0]; //メール送信 $to .= $toad; $subject = $kenmei; $sendman = $postadjpn; $header .= 'From:'. mb_encode_mimeheader($sendman). " <".$postad.">\n"; $header .= "Return-Path:".$postad."\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= $name; $body .= "様"; $body .= "\n"; $body .= "\n"; $body .= $postnaiyou; $body .= "\n"; mb_internal_encoding("ISO-2022-JP"); ini_set("mbstring.internal_encoding","UTF-8"); mb_language("uni"); mb_send_mail($to,$subject,$body,$header); $to = ""; $subject = ""; $sendman = ""; $header = ""; $body = ""; } mysql_close($con);

    • 締切済み
    • PHP
  • 中国語(GB2312)のメール送信方法

    下記の方法でEmailを送信しようとしているのですが、中国語の文字が「?」または激しく文字化けしてしまいます。 送信元のファイルはUTF-8です。 mb_internal_encoding("GB2312"); $to = "to@test.com"; $from_name = mb_convert_encoding("中国語名","GB2312","AUTO"); $from_name = mb_encode_mimeheader("中国語名","GB2312","B"); $subject = mb_convert_encoding("中国語題名","GB2312","AUTO"); $subject = mb_encode_mimeheader("中国語題名","GB2312","B"); $headers.="Content-type: text/plain; charset=GB2312\r\n"; $headers.="Content-Transfer-Encoding:8bit\r\n"; $headers.="From: ".$from_name."<from@test.com>\r\n"; $headers.="Reply-To: ".$from_name."<from@test.com>"; $body = mb_convert_encoding("中国語本文","GB2312","AUTO"); mail($to,$subject,$body,$headers); 上記方法で日本語メールを送信した場合、GB2312をISO-2022-jpに変更しただけで文字化けもなく送信できました。 中国語の場合は何か特別な処置が必要なのでしょうか。 どなたかご存知の方教えてください。

    • 締切済み
    • PHP