如何将 Exchange Web 服务项目导出到 *.eml 文件?(菲律宾比索)


How to export Exchange Web Services Item to a *.eml file? (PHP)

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

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

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

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

感谢您的任何帮助!

若要以 eml 格式保存邮件项,必须在 GetItem 操作的 ItemShape 元素中将 IncludeMimeContent 属性设置为 true
通过这样做,您将在 GetItem 响应中获得一个 MimeContent 元素:

MimeContent 元素包含本机多用途因特网邮件 表示的对象的扩展 (MIME) 流 base64二进制格式。

例如,请考虑以下代码:

<?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->_));
}
?>