当前位置: 首页 > 知识库问答 >
问题:

将邮件从回收站移至收件箱Gmail PHP Imap

沈飞舟
2023-03-14

在使用IMAP和PHP之前,我从未尝试过获取和移动电子邮件,因此将发送到垃圾箱的电子邮件移回收件箱。

好的,所以我可以正确地从Gmail中提取电子邮件,我可以删除它们,或者将它们移到垃圾箱。

当我尝试将它们移回收件箱时,我收到以下错误:

注意:未知:[TRYCREATE]第0行未知中没有文件夹[Gmail]/收件箱(失败)(errflg=2)

所以很明显,有些事情我不太明白,在过去的几个小时里,我一直在网上和stackoverflow上寻找答案,但没有运气。有人知道为什么这个特定的行动没有成功吗?

任何帮助都像往常一样非常感谢,我很乐意掌握这个窍门,让自己成为一个小电子邮件应用程序

下面是我创建的类,请参见方法undo(),这就是弹出此特定警告的地方。

class Gmail {

public $emailsexists = false;
public $emailarray = '';

private $username;
private $password;
private $inbox;


public function __construct($username,$password) {
    /* connect to gmail using imap */
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $this->username = $username;
    $this->password = $password;
    /* try to connect using username and password set in core/init.php (gmail_credentials) */
    $this->inbox = imap_open($hostname,$this->username,$this->password) or die('Cannot connect to Gmail: ' . imap_last_error());
}

public function delete($email) {
    if ($email !== '' && is_numeric($email)) {
        if (imap_mail_move($this->inbox, $email, '[Gmail]/Trash')) {
            return true;
         } else {
            return false;
         }
    } else {
        return false;
    }
    imap_close($this->inbox);
}

public function undo($email) {
    if ($email !== '' && is_numeric($email)) {
        if (imap_mail_move($this->inbox, $email, '[Gmail]/Inbox')) { // FIX Throws back a warning
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
    imap_close($this->inbox);
}

public function unseen($number = false) {

    /* grab emails */
    $emails = imap_search($this->inbox,'UNSEEN');
    /* if emails are returned, cycle through each... */
    if($emails) {
        /* statement that tells that emails exist */
        $this->emailsexists = true;
        /* put the newest emails on top */
        rsort($emails);
        /* Start the counter */
        $x = 0;
        /* Open up the accordion */
        $this->emailarray.= '<div id="accordion">';
        /* for every email... */
        foreach($emails as $email) {
            /* get information specific to this email */
            $overview = imap_fetch_overview($this->inbox,$email,0);
            $structure = imap_fetchstructure($this->inbox, $email);
            $message = imap_fetchbody($this->inbox,$email,1,FT_PEEK);
            if(isset($structure->parts) && is_array($structure->parts) && isset($structure->parts[1])) {
                $part = $structure->parts[1];
                $message = imap_fetchbody($this->inbox,$email,2,FT_PEEK);

            }
            /* escape and decode the mimeheaders */
            $subject = escape(str_replace("_"," ", mb_decode_mimeheader($overview[0]->subject)));
            /* decode and put the subject into the accordion header */
            $this->emailarray.= '<h3>'.html_entity_decode(escape($subject)).'</h3>';
            $this->emailarray.= '<div>';
            $this->emailarray.= '<div class="btn-group pull-right">';
            $this->emailarray.= '<a href="#" title="Reply" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-share-alt text-success"></span></a>';
            $this->emailarray.= '<a href="#" title="Forward" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-send text-success"></span></a>';
            $this->emailarray.= '<a href="index.php?task=delete&id='.$email.'" title="Delete" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-fire text-danger"></span></a>';
            $this->emailarray.= '</div>';
            $this->emailarray.= '<p>';
            /* decode the email body using the built in quoted_printable_decode function */
            $this->emailarray.= quoted_printable_decode($message);
            $this->emailarray.= '</p>';
            $this->emailarray.= '</div>';

            /* if the counter reaches a certain number, break out and continue the script */
            $x++;
            if ($number) {
                if ($x >= $number) {
                    break;
                }
            }

        }
        /* close off the accordion */
        $this->emailarray.= '</div>';


    /* If no emails are found return a message */
    } else {
        echo "No emails";
    }
    /* close the imap connection */
    imap_close($this->inbox);
}

}

共有1个答案

弘焕
2023-03-14

我发现,如果我连接到废纸篓,然后使用星号来获取最后一条消息,它就会按预期工作。

public function undo($email) {
    // check if message id exists and is numeric
    if ($email !== '' && is_numeric($email)) {
        // set hostname to trash
        $hostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/Trash';
        $this->inbox = imap_open($hostname,$this->username,$this->password) or die('Cannot connect to Gmail: ' . imap_last_error());
        // return true if the message was moved
        if (imap_mail_move($this->inbox, '*', 'Inbox')) {
        return true;
        } else {
        return false;
        }
    } else {
    return false;
    }
    imap_close($this->inbox,CL_EXPUNGE);
}
 类似资料:
  • 我正在尝试使用shutil库将文件移动到回收站。下面是相关的代码行,但我得到了一个奇怪的错误。这两个文件都是本地文件,我可以访问电脑上的两个位置。为什么会发生此错误?因为我用的是Main。从F复制它:? 错误消息 F: \Python\Project\venv\Scripts\Python。exe“C:\Program Files\JetBrains\PyCharm Community Editi

  • 有什么可以让我开始的指针或示例代码吗?

  • 我尝试过在laravel中使用sendmail,但它不起作用。查看我的帖子通过Laravel发送邮件不一致 所以,我试着在laravel中使用mailtrap的假的smtp服务器。这里也不行。我在Bitnami Mamp堆栈7.1上。15-0,Laravel 5.8,并在当地进行测试。 我按照这篇文章来设置代码 https://blog.mailtrap.io/send-email-in-lara

  • 注意: 本节正在开发中。 Yii 支持组成和发送电子邮件。然而,该框架提供的只有内容组成功能和基本接口。 实际的邮件发送机制可以通过扩展提供, 因为不同的项目可能需要不同的实现方式, 它通常取决于外部服务和库。 大多数情况下你可以使用 yii2-swiftmailer 官方扩展。 配置 邮件组件配置取决于你所使用的扩展。 一般来说你的应用程序配置应如下: return [ //....

  • 为主机、硬盘、镜像资源提供回收站功能。避免资源误删除导致数据丢失。 为了避免因为删除误操作而导致的数据丢失风险,云管平台提供了回收站功能。回收站用于临时存放用户删除的主机(包括虚拟机和裸金属)、硬盘、镜像文件。回收站功能仅支持管理员用户使用,普通用户不可见。 虚拟机 主机回收站用于存放用户删除的虚拟机和裸金属文件。 硬盘 硬盘回收站用于存放用户删除的硬盘文件。 镜像 镜像回收站用于存放用户删除的镜

  •       已删除的文件/文件夹/团队空间将统一进入到回收站,可以从回收站对文件进行恢复或者彻底删除。