Работа с почтой в PHP через IMAP

Подключение к IMAP

Чтобы подключиться к почтовому ящику по IMAP сначала надо на почтовом сервере разрешить такое подключение и создать пароль для приложения, которое будет подключаться по IMAP. После этого подключаемся так:

Скопировано
$imap = imap_open( '{imap.mail.ru:993/imap/ssl}INBOX', 'xxx@mail.ru', 'пароль' );
Показать код

Читаем сегодняшние письма

Скопировано
$date_from = date( 'j F Y' );
$mails = imap_search( $imap, 'SINCE "' . $date_from . '"' );
if( $mails ) {
	foreach( $mails as $mail_num ) {
		$header = imap_header( $imap, $mail_num );
		$subject = mb_decode_mimeheader( $header->subject );
		$from = mb_decode_mimeheader( $header->fromaddress );
		// делаем что-то еще ...
	}
}
Показать код

Сохраняем вложение из письма

Скопировано
// читаем непрочитанные сообщения
$mails = imap_search( $imap, 'UNSEEN' );
if( $mails ) {
	foreach( $mails as $mail_num ) {
		$structure = imap_fetchstructure( $imap, $mail_num );
		foreach( $structure->parts as $key => $part ) {
			if( isset( $part->disposition ) && $part->disposition == 'attachment' ) {
				$attachment_name = mb_decode_mimeheader( $part->parameters[0]->value );
				$attachment = base64_decode( imap_fetchbody( $imap, $mail_num, $key + 1 ) );
				file_put_contents( __DIR__ . "/files/$attachment_name", $attachment );
			}
		}
	}
}
Показать код