php imap_delete()でエラーが発生し、Yahooメールの削除ができません

このQ&Aのポイント
  • 外部サーバー上のphpスクリプトでYahooメールボックスに接続し、メール一覧を取得して特定のメールを削除または別フォルダーに移動させたいが、エラーが発生する。
  • Lolipopのメールサーバーでは同じスクリプトで削除や移動ができるが、Yahooメールサーバーにはできない。
  • imap_delete()やimap_mail_move()の結果はエラーでもTrueが返される。
回答を見る
  • ベストアンサー

php imap_delete()でエラー

外部サーバー(Lolipop と Local host)上のphpスクリプトで Yahooメールボックスに imap_open で接続してメール一覧を取得し、 特定のメールのみ 削除あるいは別フォルダーに移動させたいのですが エラーでできません。 状況: Lolipopのメールサーバーに対しては同じスクリプトで削除・移動が できています。 $mbox = imap_open($server."INBOX", $username, $password) でYahooメールサーバーにログインしメールの Headerを受信することは 出来ています。 しかしその受信メールのうちの一つをメール番号($i)を指定して imap_delete($mbox, $i); と削除しようとするとサーバーから以下のエラーが 返されて削除できません。 Notice: Unknown: [CANNOT] STORE It's not possible to perform specified operation (errflg=2) in Unknown on line 0 あるいは、移動先のフォルダ名($boxnm)を指定して imap_mail_move ( $mbox, $i , $boxnm, $flags= 0); と移動させようとしても同じエラーが返されます。 ただ、imap_delete() , imap_mail_move() の結果は エラーの場合でも何故か Trueが帰ってきています。 phpスクリプトで Yahooメールを削除できている方がいらっしゃれば アドバイスをお願いできませんか。 以下 現状のスクリプトの骨子です。 該当のソースコード $arr_strs = ["word1","word2"]; // 検索ワード if($mbox = imap_open($server."INBOX", $username, $password)) { $mboxes = imap_check($mbox); $mail_cnt = $mboxes -> Nmsgs; for($i = $mail_cnt; $i > $mcnt_old; $i--) { // 新しいメールをチェック $header = imap_headerinfo($mbox, $i); $title = htmlspecialchars(mb_decode_mimeheader($header -> subject)); foreach ($arr_strs as $str) { if(!$str) {break;} if(strpos($title, $str) !== false) { // 件名に検索ワードが含まれる $out = imap_delete($mbox, $i) or die "<b>failed mail delete : $i : $title </b><br>\n"; $matchn++; if(!$out){ echo "delete error: $i \n";} goto match; } } imap_expunge($mbox); // 移動したメールをInboxから削除 match: } }else{ print "could not connect to the mail box //"; } echo "$matchn deleted ";

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

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5069/13245)
回答No.1

imap_delete() で指定する message_nums はIMAPサーバがメッセージに割り当てている番号であって、貴方が取得した「何件目」の番号とは一致しない場合があるのでループのカウンターの値を入れても番号が一致せずエラーになります。 imap_delete() はリファレンスを見ると必ず True を返すようなので、IMAPサーバ側で処理がエラーになってもPHP側の処理としては True と言う事のようです。

creative_soso
質問者

お礼

早々のアドバイスありがとうございました。 おっしゃるように、Yahooメールボックスの場合は UIDを指定するようです。 $UID = imap_uid($mbox, $i); で UIDを取得して imap_delete($mbox, $UID, FT_UID); または imap_mail_move($mbox, $UID, "Trash", FT_UID) とすることで削除できました。 1週間ほど悩んだ疑問が解消できて感謝です。

関連するQ&A

  • imap_open()でLogin aborted

    phpから、imap_openを使用して、gmailの情報を受信したいのですが、 以下のように記述し、実行すると 「imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX」と表示されて、 更に、エラーには、「Login aborted」が返されております。 実行前に、以下の点は確認しました。  ・ アカウント、パスワードは間違っておりません。  ・ GmailのIMAPを有効にしております。  ・ 実行中の環境で、「telnet imap.gmail.com 993」を実行して接続できることを確認 いろいろサイトを調べたのですが、良い情報がなかなか見つかりません。 何が問題なのかご教授頂けないでしょうか。 よろしくお願いいたします。 --- 以下は実際のソース(アカウント、パスワードは適当なものを設定) ---- $server = "imap.gmail.com"; $port = 993; $account = "XXXXXX@gmail.com"; $passowrd = "YYYYYYYY"; // メールサーバ接続 $mbox = imap_open("{".$server.":".$port."/imap/ssl/novalidate-cert}INBOX", $account, $password); print_r(imap_errors()); // メール閉じる imap_close($mbox);

    • ベストアンサー
    • 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
  • IMAPメールについて質問です。

    現在IMAPメールとして代表的なソフトバンクのiphoneメール(i)を利用しています。 IMAPメールとは、サーバーに保存されていて、端末(いくつであっても)で読み込めるという形式だと認識しています。 逆に、端末でメール操作(送信、削除など)をすると、サーバーを介し全端末に同じ操作結果が反映されると認識しています。 質問なのですが、、IMAPメールを使っているPCからそのIMAPメールアカウントを削除してメール自体も削除します。その直後に同アカウントをメールソフトに設定(ログイン)すると、削除前のメール状態に戻るのでしょうか?(サーバーに残っているメールが自動で取り込まれる?)

  • IMAP コマンドエラーについて

    スマホのWebメールをライブメール(Win7)にダウンロードしたいのです。 ここでの手順をやったのですが http://iphone3g.blog39.fc2.com/blog-entry-19.html だめでした。 「ネットワークに関係ないエラーのため、IMAP コマンドはサーバーに送信できませんでした。メモリが不足している可能性があります。」 というエラーがでます。 受信メールサーバーの種類:IMAP 受信メール(IMAP):sync.ezweb.ne.jp 送信メール(SMTP):sync.ezweb.ne.jp 受信メールポート:25(このサーバーは…(SSL)が必要にチェック) 送信メールポート:993(このサーバーは…(SSL)が必要にチェック) パスワード:(iPhonで設定したのと同じ) このように設定しましたが同じメッセージがでます。 何が問題なのでしょうか?

  • 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
  • IMAPとPOP

    待望のIMAPでの利用を開始しました.ところが,約1ヵ月以前の入電メイルが自動的に削除されてしまいます.POPで,”サーバーに30日間入電メイルを残す”設定してたので,これが原因かもしりません.やはり,POP設定を削除してから,IMAP設定をしなけければならないのでしょうか,どなたか宜しくお願い致します.

  • 2003→gmail移行 imap使えず・・?

    はじめまして。 outlook2003からgmailへ過去のメール(20~30通程)を移行したいと思っています。 gmailにimapを設定し、現在既存のISPサーバに届くメールはgmailでも読む事は出来ますが (これが同期ですか?) 過去メールのgmailへの移行が出来ません。 https://support.google.com/mail/bin/answer.py?hl=ja&answer=77661 を参考にoutlook2003にimapフォルダを設定し、既存メールをimapフォルダへドラックすると 「このアイテムを移動出来ません。 サーバーへの接続が利用出来ません。この処理を完了するには、サーバーに接続している必要があります」とのエラーMSGが出現します。 考えられる理由は何だと思われますか??? お手数ですがよろしくお願いいたします・・

  • gmailとOutlook2003でIMAPを行い、一旦は成功し過去メ

    gmailとOutlook2003でIMAPを行い、一旦は成功し過去メールも一部はIMAPでGmailに移行できたのですが、 その後急に接続ができなくなってしまいました。 エラーメッセージはサーバーに接続できません。などと出てしまいます。 現状、移動させてしまったメールはGmailで見て、新しく来るメールはOutlookと非常に不便です。 どなたか助けてください。

  • IMAPを取得する方法を教えてください

    会社のメールを自宅で読みたいのです。(会社にもメールを残しておきたい) メールアドレス追加をし、<電子メールサーバのセットアップ>のところにくると、受信サーバーの種類がPOP3になっているので、種類を<IMAP>に変更すると、エラーが出てうまくいきません。 どうしたらIMAPを使えるようになるのでしょうか。 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

  • IMAPメールを削除できない。

    MercuryというメールサーバーとOutlookExpressを使用してるんですが、IMAPメールを削除できません。打ち消し線が付くのみです。どなたかご存知の方削除方法を教えてください。

専門家に質問してみよう