如何将Exchange Web服务项导出到* .eml文件? (PHP)

时间:2013-09-11 22:47:56

标签: php exchangewebservices php-ews

我正在为Exchange Web服务开发一个Web界面,该界面应该能够将邮件项目保存为eml格式。我使用PHP-EWS(https://github.com/jamesiarmes/php-ews)建立与Exchange Server的连接。

我知道这样的文件是怎么样的,所以我可以下载一个邮件项目并生成一个带有数据的eml模板。

但我发现这篇文章:Save mail to msg file using EWS API。 Colin谈到了一种直接将邮件项目导出到eml文件的机制。这在PHP中也可能吗?

此外,我发现了另一件事:https://github.com/jamesiarmes/php-ews/wiki/Email:-Set-Extended-MAPI-Properties。在这个例子中,有人生成一个mime内容并将其设置为一个新项目。是否有可能为现有项目获取mime类型(对我来说看起来像一个eml文件)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

要以eml格式保存邮件项目,您必须在IncludeMimeContent操作的ItemShape元素中将GetItem属性设置为 true 。 /> 通过这样做,您将进入GetItem response一个MimeContent element

  

MimeContent元素包含本机多用途Internet邮件   表示的对象的扩展(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->_));
}

?>