Я пытаюсь создать кусок кода, который войдет в почтовый ящик и вытащит вложения определенного файла. До сих пор я могу только видеть, есть ли вложение или нет вложения в электронном письме.
Но я хочу, чтобы он мог извлекать вложения из электронной почты и затем сохранять их в указанном каталоге. Тип вложения, которое я пытаюсь вынуть — это .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);
?>
Вместо 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);
}
}
}
}
Других решений пока нет …