【问题标题】:PHP delete old messages from IMAP mail accountPHP 从 IMAP 邮件帐户中删除旧邮件
【发布时间】:2018-07-07 01:08:30
【问题描述】:

我正在尝试访问 IMAP 网络邮件帐户,以便使用 php 删除旧邮件。我到目前为止的脚本是:

<?php

$del = new DateTime();
$del->modify('-1 month');

$mbox = imap_open("{imap.test.com:993/imap/ssl}INBOX", "username", "password")
 or die("can't connect: " . imap_last_error());

$MC = imap_check($mbox);

// Fetch an overview for all messages in INBOX
$result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
foreach ($result as $overview) {
    $date = $overview->date;
    $date = DateTime::createFromFormat('D, d M Y H:i:s O', $date); 

    if($date<$del) {
        imap_delete($mbox,$overview->msgno);
    }

}   
imap_expunge($mbox);
imap_close($mbox);
?>

代码现在是正确的。但是网络托管服务不允许从本地主机脚本访问他们的 IMAP 服务器

【问题讨论】:

  • 您的网络服务器日志说什么?
  • 您的服务器上是否安装了 IMAP 功能?您可以通过function_exists() 查询

标签: php email datetime automation imap


【解决方案1】:

这一行需要一个分号:

imap_expunge($mbox);

当 PHP 无法解析时,它会返回 500 错误。

【讨论】:

  • 可能你的文件夹真的被命名为收件箱...打印一些调试信息,就像你找到了多少条消息一样...
  • 好像 one.com 不允许用户通过脚本访问他们的 IMAP 服务器。因此,上面的任务是不可能的......
  • 我认为您必须在致电imap_expunge($mbox)之前将邮件标记为删除
  • 您可能还必须使用 stunnel 与邮箱建立连接,然后使用如下内容:$mbox = imap_open("{localhost:143/notls}INBOX", $user, $pass);
  • 没关系,我认为您已经在调用 imap_expunge() 之前标记要删除的消息。
【解决方案2】:

在删除之前尝试将其标记为删除,这对我有用。

imap_delete($mbox, 1);

imap_expunge($mbox);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2011-05-21
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2012-07-05
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多