Php извлечение вложений электронной почты

Я пытаюсь создать кусок кода, который войдет в почтовый ящик и вытащит вложения определенного файла. До сих пор я могу только видеть, есть ли вложение или нет вложения в электронном письме.

Но я хочу, чтобы он мог извлекать вложения из электронной почты и затем сохранять их в указанном каталоге. Тип вложения, которое я пытаюсь вынуть — это .jpg

Я пробовал кучу разных фрагментов кода, которые нашел в Google, и я пытался адаптировать его под свой код, но до сих пор мне не удавалось найти что-нибудь, что работает правильно.

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

Благодарю.

<?php

/* connect to email */
$hostname = '{*****.com:110/pop3}INBOX';
$username = '*****';
$password = '*****';

// try to connect
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to server: ' . imap_last_error());

// grab emails
$emails = imap_search($inbox,'ALL');

// Search for the 39th email, which has an attachment
$count = 39;// Fetch all the information about an email
$attachment = imap_fetchstructure($inbox, $count);// find out how may parts the object has
$numparts = count($attachment->parts);

// find if if multipart message
if ($numparts >= 2) {foreach ($attachment->parts as $part) {

if ($part->disposition == "INLINE") {
// inline message. Show number of lines

printf("Inline message has %s lines<BR>", $part->lines);

} elseif ($part->disposition == "ATTACHMENT") {
// an attachment

echo "Attachment found!";
// print out the file name
echo "Filename: ", $part->dparameters[0]->value;

}

}

}
//}
else {
// only one part so get some useful info
echo "No attachment";
}

imap_close($imap);
?>

-1

Решение

Вместо imap_search я использовал imap_check чтобы получить обзор сообщений, и следующее работало.
Просмотрите сообщения, найденные с imap_checkи вот как вы извлекаете двоичные данные вложения:

    $mbox = imap_open( . . . . );
$IMAPobj = imap_check($inbox);

$start = $IMAPobj->Nmsgs-30;
$end = $IMAPobj->Nmsgs;
$result = imap_fetch_overview($inbox,"$start:$end",0);

$count = $end;
foreach ($result as $overview) {
$parts = mail_mime_to_array($inbox, $count);
foreach($parts as $part) {
if(@$part['filename'] || @$part['name'] ) {

$partName = $part['filename'] ? $part['filename'] : $part['name'];
echo "Attachment name is " . basename($partName);
echo "\n";

if(preg_match( . . . write here a regex to detect ".jpg" in $partName . . .)) {
echo "Found file! Extracting binary data...";

$fileContents = $part['data'];
file_put_contents("attachment.jpg", $fileContents);
}
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]