Я работаю с классом для разбора и просмотра писем, и он прекрасно работает:
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, однако здесь у меня просто есть идентификатор изображения и имя изображения, поэтому я не уверен, где на самом деле находится изображение , Любые идеи о том, как взять информацию вложения и сохранить файлы на сервере, чтобы я мог показать их пользователю?
Чтение исходного кода: вам нужно указать каталог для хранения вложений.
class Mailbox {
# ....
public function __construct($imapPath, $login, $password,
$attachmentsDir = null, $serverEncoding = 'UTF-8')
Если это нулевые вложения не будет сохранен локально, таким образом, нет filePath
,
Это работает для меня:
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/);
}