我正在尝试从电子邮件中读取邮件...根据主题的内容,我想将其移至“进程”或“未授权”文件夹
将消息保存在数组中,然后将消息从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
我认为问题在于我如何将$ id传递给imap_mail_move
函数。
我还试图将消息序列号转换为像$f['id'] = imap_uid($this->conn , $id )
这样的UID号,但是没有用。
我也试过这个
$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);
我无法移动信息。
如何正确移动讯息?
答案 0 :(得分: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
中定义的新文件夹。
第二个示例意味着将消息1,2,3,4,5从当前文件夹移动到$box
中定义的新文件夹。
第三个示例意味着将消息1,2,5,6,7从当前文件夹移动到$box
中定义的新文件夹。
此外,以下是$ box变量的一些示例
'INBOX/Processed'
'Unauthorized'
第一个示例表示位于INBOX文件夹下的Processed
文件夹。
第二个示例表示位于下一个"相同位置的Unauthorized
文件夹"到INBOX文件夹
要了解每个文件夹在电子邮件中的位置,您可以使用imap_list功能。
我希望这对其他人有所帮助,因为我花了一段时间才发现这个愚蠢的问题。