【问题标题】:How to export Exchange Web Services Item to a *.eml file? (PHP)如何将 Exchange Web 服务项目导出到 *.eml 文件? (PHP)
【发布时间】:2013-09-16 03:34:39
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: php exchangewebservices php-ews


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多