2013-09-11 2 views
2

Я разрабатываю веб-интерфейс для веб-служб Exchange, который должен иметь возможность сохранять почтовый элемент в формате eml. Я использую PHP-EWS (https://github.com/jamesiarmes/php-ews) для установления соединения с сервером Exchange.Как экспортировать элемент веб-служб Exchange в файл * .eml? (PHP)

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

Но я нашел это сообщение: Save mail to msg file using EWS API. Колин рассказывает о механизме, который напрямую экспортирует почтовый элемент в файл eml. Возможно ли это и в PHP?

Дополнительно я нашел другое: https://github.com/jamesiarmes/php-ews/wiki/Email:-Set-Extended-MAPI-Properties. В этом примере кто-то генерирует mime-контент и устанавливает его в новый элемент. Возможно ли получить тип mime (который выглядит как файл eml для меня) для существующего элемента?

Спасибо за помощь!

ответ

2

Чтобы сохранить почтовый пункт в формате EML, вы должны установить IncludeMimeContent свойство истинного в ItemShape элементе GetItem операции.
Поступая таким образом, вы получите в GetItem responseMimeContent element:

Элемент MimeContent содержит нативный Multipurpose Internet Mail Extensions (MIME) поток объекта, который представлен в формате base64Binary.

В качестве примера, рассмотрим следующий код:

<?php 

function __autoload($class_name) { 
    $base_path = 'php-ews-master'; 
    $include_file = $base_path . '/' . str_replace('_', '/', $class_name) . '.php'; 
    return (file_exists($include_file) ? require_once $include_file : false); 
} 

/* 
** Adjust these variables before running the script! 
*/ 
$server  = 'your_server'; 
$username = 'your_user'; 
$password = 'your_password'; 
$message_id = 'your_message_id'; 

$ews = new ExchangeWebServices($server, $username, $password); 
//print_r($ews); 

$request = new EWSType_GetItemType(); 

$request->ItemShape = new EWSType_ItemResponseShapeType(); 
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES; 
$request->ItemShape->IncludeMimeContent = true; 

$request->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType(); 
$request->ItemIds->ItemId = new EWSType_ItemIdType(); 
$request->ItemIds->ItemId->Id = $message_id; 

$response = $ews->GetItem($request); 
//echo '<pre>'.print_r($response, true).'</pre>'; 

if (($response->ResponseMessages->GetItemResponseMessage->ResponseCode == 'NoError') && 
    ($response->ResponseMessages->GetItemResponseMessage->ResponseClass == 'Success')) { 
    file_put_contents("test.eml", base64_decode($response->ResponseMessages->GetItemResponseMessage->Items->Message->MimeContent->_)); 
} 

?> 
+0

спасибо так много! :-) –

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