注意:未知:IMAP协议错误:无法在第0行的Unknown中解析命令(errflg = 2)

时间:2017-06-14 23:03:27

标签: php imap

以下代码设置IMAP标记,并将已删除或未删除的电子邮件移动到各自的文件夹中。不是问题,而是我的好奇心是,当我清除删除标志(\\已删除,实际上是\已删除)时,我收到以下通知“注意:未知:IMAP协议错误:无法解析命令(errflg = 2)在第0行的“未知”中。然而,一切似乎工作得很好,电子邮件删除标志被清除,电子邮件被移回收件箱,实际上没有任何意外发生。

我已经在网上和StackOverflow上寻找答案,但我没有找到答案我的问题。从imap_mail_copy()下的PHP文档中,通知是引用,并且注释说确保$ message_num传递一个字符串(例如。"$msg_num"$msg_num(string) $msg_num)。没有什么能解决我的特殊好奇心,因为正如我所说,代码仍能完美地完成工作。

作为一个附带问题,我通过ajax和jquery发布到这个脚本,在javascript中,当我传递标志时我必须逃避“\”\如此删除:flag: "\\Deleted"但是当我通过\时看见我传递如下:flag: "\Seen"逃脱在这里不是必须的。为什么呢?

<?php
session_start();
require_once $_SERVER['DOCUMENT_ROOT'].'/../constants.php';

$setFlags = [
    '\Seen'     => true,
    '\Answered' => true,
    '\Flagged'  => true,
    '\Deleted'  => true,
    '\Draft'    => true
];

$resetFlags = [
    '\\\\Seen'     => true,
    '\\\\Answered' => true,
    '\\\\Flagged'  => true,
    '\\\\Deleted'  => true,
    '\\\\Draft'    => true
];

$folder = $_POST['folder'];
$flag = $_POST['flag'];
$uid = $_POST['uid'];
$action = isset($_POST['action'])? strtoupper($_POST['action']): '';

if(($imap = imap_open(IMAPSEQUENCE.$folder, IMAPUSER, IMAPPASS)) == false){
    echo 'failed to open email server';
    exit();
}

if($action == 'SET' && $setFlags[$flag]){
    echo imap_setflag_full($imap, $uid, $flag, ST_UID);
    if($flag == '\Deleted'){
        imap_mail_move($imap, "$uid:$uid", '[Gmail]/Trash', CP_UID);
    }
    imap_close($imap);    
    exit();
} elseif($action == 'RESET' && $resetFlags[$flag]){
    echo imap_clearflag_full($imap, $uid, $flag, ST_UID);
    if($flag == '\\\\Deleted'){
        echo imap_mail_move($imap, "$uid:$uid", 'INBOX', CP_UID);
    }
    imap_close($imap);    
    exit();     
}

echo '<strong style="color: red;">Email action failed';
imap_close($imap);    
exit();
?>

0 个答案:

没有答案