我正在为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文件)?
感谢您的帮助!
答案 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->_));
}
?>