Откройте поток IMAP для получения писем с вашего INBOX
и поиска писем с критериями поиска.
$inbox = imap_open('{imap.gmail.com:993/imap/ssl}INBOX', $username, $password) or die('Cannot connect: ' . imap_last_error());
$inboxmails = imap_search($inbox, 'SUBJECT "'.$subject.'" SINCE "'.$since_date.'" BEFORE "'.$before_date.'"', SE_UID);
Вы можете извлечь несколько вложений с помощью этого кода, он работает и извлечь несколько вложений из одной почты.
Вы должны открыть поток, используя imap_open (), после этого вы можете искать сообщения, используя imap_search ().Он возвращает вам массив номеров электронной почты.
Предположим, номер электронной почты равен 369.
$email = 369;
$msgno = imap_msgno($inbox, $email);
foreach($attachmentObj as $key => $val)
{
if($val['is_attachment']){
echo "\nFilename: ".$val['filename']."\n";
echo "Extension: ". pathinfo($val['filename'],PATHINFO_EXTENSION);
//print_r($val);?>
<img src="data:image/jpeg;base64,<?php echo base64_encode($val['attachment']);?>" width="200">
<?php
}
}
Чтобы извлечь вложения электронной почты, нужно получить imap_fetchstructure, и это вернет объект, где вы можете проверить, есть лиесть вложения или нет.
function extract_attachments($connection, $message_number) {
$attachments = array();
$structure = imap_fetchstructure($connection, $message_number);
if(isset($structure->parts) && count($structure->parts)) {
for($i = 0; $i < count($structure->parts); $i++) {
$attachments[$i] = array(
'is_attachment' => false,
'filename' => '',
'name' => '',
'attachment' => ''
);
if($structure->parts[$i]->ifdparameters) {
foreach($structure->parts[$i]->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters) {
foreach($structure->parts[$i]->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment']) {
$attachments[$i]['attachment'] = imap_fetchbody($connection, $message_number, $i+1);
if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
return $attachments;
}