2

我正在为 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 文件)?

谢谢你的帮助!

4

1 回答 1

2

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

MimeContent 元素包含以 base64Binary 格式表示的对象的本机多用途 Internet 邮件扩展 (MIME) 流。

例如,考虑以下代码:

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

?>
于 2013-09-18T20:45:05.347 回答