IMAP 和 PHP - 从已发送和收件箱文件夹中获取所有电子邮件

问题描述 投票:0回答:4

我正在尝试获取所有接收和发送的电子邮件,并使用 PHP 将其写入 mySQL 数据库。

我使用的主机名是:

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';

仅引用收件箱,并成功获取仅收到的电子邮件。

要获取已发送的电子邮件,我正在尝试使用此主机名:

$hostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/All Mail';

将“INBOX”替换为“[Gmail]/All Mail”,没有电子邮件(甚至没有发送)并被退回。

如何抓取所有发送和接收的电子邮件?

php mysql email imap
4个回答
6
投票

您可以使用此代码

$host = '{imap.gmail.com:993/ssl}';
$mail_con = imap_open($host, $login, $password);
$mailboxes = imap_list($mail_con, $host, '*');

你可以得到这样的数组

Array(
    [0] => {imap.gmail.com:993/ssl}INBOX
    [1] => {imap.gmail.com:993/ssl}Personal
    [2] => {imap.gmail.com:993/ssl}Servers
    [3] => {imap.ipage.com:993/imap/ssl}INBOX.Sent Items
    [4] => {imap.ipage.com:993/imap/ssl}INBOX.Drafts
)

删除上面的代码并像这样在 imap_open 中使用任何数组

 $host = '{imap.gmail.com:993/ssl}INBOX.Sent';
 $mail_con = imap_open($host, $login, $password);

4
投票

您可能需要在两次通话、收件箱和已发送邮件中执行此操作。根据这篇文章:GMAIL 发送的文件夹无法使用 IMAP 访问,已发送的项目文件夹称为

[gmail]/sent mail


0
投票

我实际上不知道这个问题的答案是什么

9 years
之前,但是,我发布它的时间
{imap.gmail.com:993/imap/ssl/novalidate-cert}[Gmail]/All Mail
应该改用它,它对我有用。这是供参考的代码示例

    $inbox = "{imap.gmail.com:993/imap/ssl/novalidate-cert}[Gmail]/All Mail";
    $id = "[email protected]";
    $pwd = "Keep_me_secret_😶";

    $imap = imap_open($inbox, $id, $pwd);
    $ALL = imap_search($imap, '');
    
    echo count($ALL); //Total Number of Mails

-2
投票

实际上,从所有这些文件夹中提取邮件非常简单,您所要做的只是制作一个文件夹扩展名,如 .Sent、.Drafts 等。

例子:

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX.Sent'; //For Sent Items<br>
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX.Drafts';//For draft<br>
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX.Trash';//For trash<br>
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX.Junk';//For junk<br>
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX.yourfolder';//For the folders u created
© www.soinside.com 2019 - 2024. All rights reserved.