2015-05-04 27 views
1

я работаю с классом для синтаксического анализа и просмотра сообщений электронной почты и он прекрасно работает: https://github.com/barbushin/php-imapbarbushin IMAP-PHP получить вложения, как сохранять вложения на сервере

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

Это мой код для вторя из писем:

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 
    } 
} 

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

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

ответ

1

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

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

Если это не пустые вложения will not be saved locally, таким образом, не filePath..

0

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

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/); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^