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

ia2d9nvy  于 2023-04-29  发布在  Mysql
关注(0)|答案(4)|浏览(157)

我试图获取任何收到和发送的电子邮件,并使用PHP将其写入mySQL数据库。
我使用的主机名是:

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

它只引用了收件箱,并成功地抓取了收到的电子邮件。
要获取已发送的电子邮件,我尝试使用此主机名:

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

通过将“收件箱”替换为“[Gmail]/所有邮件”,没有电子邮件(甚至没有发送)和被返回。
如何获取所有发送和接收的电子邮件?

0ejtzxu1

0ejtzxu11#

可以使用此代码

$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);
d4so4syb

d4so4syb2#

您可能需要在两个呼叫中执行此操作,即收件箱和已发送项目。根据这篇文章:GMAIL sent folder not accessible using IMAP,发送的邮件文件夹称为[gmail]/sent mail

4urapxun

4urapxun3#

我真的不知道这个问题的答案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 = "fakeMail@test.com";
    $pwd = "Keep this secret 😶";

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

iklwldmw4#

实际上这是非常简单的从所有这些文件夹中提取邮件,你要做的就是做一个文件夹扩展名一样。已发送、草稿等.
示例:

$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

相关问题