barbushin imap-php получить вложения как хранить вложения на сервере

Я работаю с классом для разбора и просмотра писем, и он прекрасно работает:
https://github.com/barbushin/php-imap

Сейчас я пытаюсь сохранить вложения на сервере, но раньше никогда не работал с вложениями электронной почты, поэтому не уверен, как это работает.

Это мой код для вывода электронных писем:

header('Content-Type: text/html; charset=utf-8');
require_once('php_imap/IncomingMail.php');
require_once('php_imap/Mailbox.php');
//require_once('PHPMailer/class.phpmailer.php');

use PhpImap\Mailbox as ImapMailbox;
use PhpImap\IncomingMail;
use PhpImap\IncomingMailAttachment;

$mailbox_name = "[email protected]";
$mailboxPassword = "xxxxxxxxxxxx";

// Accessing the mailbox
$mailbox = new PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX', $mailbox_name, $mailboxPassword);
$mails = array();

$mailsIds = $mailbox->searchMailBox('UNSEEN');
if(!$mailsIds) {
die('Mailbox is empty');
}

foreach ($mailsIds as $mailId){
$mail = $mailbox->getMail($mailId);
echo "---------------------------Start of Email ---------------------------" . "<br />";
echo $mail->date . "<br />";
echo "From: " . $mail->fromName .  " - " . $mail->fromAddress . "<br />";
if($mail->cc){
echo "CC: " . $mail->cc . "<br />";
}
echo "Subject: " . $mail->subject . "<br /><br />";
if($mail->textHtml == NULL){
echo $mail->textPlain;
}else{
echo $mail->textHtml;
}
echo "<br /><br />";
echo "---------------------------End of Email ---------------------------";
echo "<br /><br /><br /><br /><br /><br />";

echo "attachments: ";
echo "<PRE>";
var_dump($mail->getAttachments());
echo "</PRE>";
}

Теперь содержимое электронной почты выходит нормально, вложения выводятся так:

attachments:

array(3) {
["[email protected]"]=>
object(PhpImap\IncomingMailAttachment)#21 (3) {
["id"]=>
string(30) "[email protected]"["name"]=>
string(12) "image002.jpg"["filePath"]=>
NULL
}
["[email protected]"]=>
object(PhpImap\IncomingMailAttachment)#12 (3) {
["id"]=>
string(30) "[email protected]"["name"]=>
string(12) "image004.png"["filePath"]=>
NULL
}
["[email protected]"]=>
object(PhpImap\IncomingMailAttachment)#32 (3) {
["id"]=>
string(30) "[email protected]"["name"]=>
string(12) "image005.jpg"["filePath"]=>
NULL
}
}

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

С вложениями, отправленными как $ _POST, я могу переместить их из временной папки в постоянную, потому что у меня есть значение пути в информации $ _files, однако здесь у меня просто есть идентификатор изображения и имя изображения, поэтому я не уверен, где на самом деле находится изображение , Любые идеи о том, как взять информацию вложения и сохранить файлы на сервере, чтобы я мог показать их пользователю?

1

Решение

Чтение исходного кода: вам нужно указать каталог для хранения вложений.

class Mailbox {
# ....
public function __construct($imapPath, $login, $password,
$attachmentsDir = null, $serverEncoding = 'UTF-8')

Если это нулевые вложения не будет сохранен локально, таким образом, нет filePath,

1

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

Это работает для меня:

private $mailbox; //ImapStream

public function __construct()
{
$this->mailbox = new ImapMailbox('{host}INBOX', 'user', 'pass', __DIR__);
$this->mailbox->setAttachmentsDir('tmp/');
}

public function getListOfMails()
{
$mailsIds = $this->mailbox->searchMailbox('ALL');
if(!$mailsIds) {
die('Mailbox is empty');
}

$mails = $this->mailbox->getMailsInfo($mailsIds);
$mails = array_reverse($mails);

return $mails;
}

public function getFullMail($mailId)
{
$mail = $this->mailbox->getMail($mailId);
echo $mail->replaceInternalLinks('tmp/);
}
0

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