0

メールからメッセージを読み込もうとしています...件名の内容に応じて、「プロセス」または「未承認」フォルダーに移動したい

メッセージを配列に保存してから、メッセージを INBOX から Proceeded フォルダーに移動します。

これが私がやったことです

// Checks the inbox
if ($messages = imap_search($this->conn,'ALL'))
{
    // Sorts the messages newest first
    rsort($messages);
    // Loops through the messages
    foreach ($messages as $id)
    {
        $header = imap_headerinfo($this->conn, $id);
        $message = imap_fetchbody($this->conn, $id, 1);

        if(    !isset($header->from[0]->mailbox) || empty($header->from[0]->mailbox)
            || !isset($header->from[0]->host) || empty($header->from[0]->host)
            || !isset($header->subject) || empty($header->from[0]->host)
        ) {
            continue;
        }

        $from = $header->from[0]->mailbox . '@' . $header->from[0]->host;
        $subject = $header->subject;    

        $outlook = $this->_parseReplyExchange($message);

        if($outlook !== false){
            $newReply = $outlook;
        } else {
            $newReply = $this->_parseReplySystem($message);
        }

        $ticketID = $this->_parseTicketID($subject);
        if($ticketID !== false){
            $f = array();
            $f['id'] = $id;
            $f['from'] = $from;
            $f['subject'] = $subject;
            $f['ticketID'] = $ticketID;
            $f['message'] = $newReply;
            $this->replyList[] = $f;

            $imapresult = imap_mail_move($this->conn, $id, $box, CP_UID);

            if($imapresult == false){
                echo imap_last_error();
            }
        }
    }
}
else
{
    exit('No messages on the IMAP server.');
}

問題なくメッセージを読みましたが、メッセージを移動しようとするとエラーが発生します。

.[TRYCREATE] The requested item could not be found.
Notice: Unknown: [TRYCREATE] The requested item could not be found. (errflg=2) in Unknown on line 0

imap_mail_move問題は、 $id を関数に渡す方法だと思います。

また、メッセージのシーケンス番号をそのように UID 番号に変換しようとしましたが、うまくいき$f['id'] = imap_uid($this->conn , $id )ませんでした..

私もこれを試しました

$imapresult = imap_mail_move($this->conn, '1:' . $id, $box);
$imapresult = imap_mail_move($this->conn, '1:' . $id, $box, CP_UID);

メッセージをコピーしてから削除しようとしましたが、うまくいきませんでした。

$imapresult = imap_mail_copy($c, '1', 'INBOX/Processed', CP_MOVE);

メッセージが動かない。

メッセージを正しく移動するにはどうすればよいですか?

4

1 に答える 1

2

問題が見つかりました。

問題は、Processedフォルダーが INBOX フォルダーのサブフォルダーではないことです。INBOXの次のフォルダ設定でした。

ここでのポイントは、imap_mail_move()関数を使用する場合、シーケンス番号またはシーケンス番号の範囲を渡す必要があることです。

$imapresult = imap_mail_move($this->conn, $id, $box);

受信した各メッセージにはシーケンス番号1,2,3,nがあり、n は指定されたボックスで受信した最新のメッセージです。

$id変数の例を次に示します。

1
1:5
1,2,5,6,7

最初の例は、メッセージ 1 を現在のフォルダーから で定義された新しいフォルダーに移動することを意味します$box

2 番目の例は、メッセージ 1、2、3、4、5 を現在のフォルダから で定義された新しいフォルダに移動することを意味します$box

3 番目の例は、メッセージ 1、2、5、6、7 を現在のフォルダから で定義された新しいフォルダに移動することを意味します$box

さらに、$box 変数の例をいくつか示します。

'INBOX/Processed'
'Unauthorized'

最初の例はProcessed、INBOX フォルダーの下にあるフォルダーを意味します。

2 番目の例はUnauthorized、INBOX フォルダーの「同じ場所」にあるフォルダーを意味します。

各フォルダーがメール内のどこにあるかを知るには、imap_list関数を使用できます。

このばかげた問題を見つけるのに時間がかかったので、これが他の人に役立つことを願っています。

于 2015-03-15T18:03:35.950 に答える