Как скопировать электронную почту с Gmail на мой сервер с помощью PHP IMAP?

Как я могу копировать электронную почту из Gmail в каталог моего сервера /home/email после подключения к почтовому ящику Gmail с использованием функций IMAP PHP ?

Я хочу получить каждое электронное письмо в виде файла в формате MIME, и я хочу загрузить полный MIME-файл с PHP, а не только с телом или заголовком письма. Из-за этого imap_fetchbody и imap_fetchheader не могут выполнить эту работу.

Кроме того, imap_mail_copy и imap_mail_move не могут выполнять эту работу, потому что они предназначены для копирования / перемещения электронной почты в почтовые ящики:

  • imap_mail_copy: копирование определенных сообщений в почтовый ящик.
  • imap_mail_move: переместить указанные сообщения в почтовый ящик.

PHP загрузит полное сообщение MIME из Gmail или любого сервера IMAP, используя imap_fetchbody когда параметр $section установлен в значение "" . Это приведет к тому, что imap_fetchbody все сообщение MIME, включая заголовки и все части тела.

Краткий пример

 $mime = imap_fetchbody($stream, $email_id, ""); 

Длинный пример

 // Create IMAP Stream $mailbox = array( 'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX', 'username' => 'my_gmail_username', 'password' => 'my_gmail_password' ); $stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password']) or die('Cannot connect to mailbox: ' . imap_last_error()); if (!$stream) { echo "Cannot connect to mailbox\n"; } else { // Get last week's messages $emails = imap_search($stream, 'SINCE '. date('dM-Y',strtotime("-1 week"))); if (!count($emails)){ echo "No emails found\n"; } else { foreach($emails as $email_id) { // Use "" for section to retrieve entire MIME message $mime = imap_fetchbody($stream, $email_id, ""); file_put_contents("email_{$email_id}.eml", $mime); } } // Close our imap stream. imap_close($stream); }