You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP-EWS获取Outlook Exchange Server用户邮件签名?

获取Exchange用户邮件签名(PHP-EWS实现)

我之前用PHP-EWS做过Exchange邮箱的集成开发,刚好解决过获取用户签名的问题,给你分享下具体的实现思路和代码示例,应该能帮到你。

首先要明确:Exchange是把用户的签名存储在用户配置项里的,而不是普通邮件文件夹,所以我们需要用EWS的GetUserConfiguration操作来获取,而不是常规的邮件查询接口。

具体实现步骤

  1. 确保你的PHP-EWS客户端已经正常初始化并能连接到Exchange服务器(你已经实现了收发删邮件,这部分应该没问题,不过还是贴一下基础初始化代码)
  2. 构造GetUserConfigurationRequest请求,指定获取名为Signatures的配置项
  3. 解析返回的XML数据,提取出默认签名(或所有签名)的HTML/纯文本内容

代码示例

首先是客户端初始化(和你现有代码一致):

require_once 'vendor/autoload.php';

use PhpEws\Client;
use PhpEws\Request\GetUserConfigurationRequest;

// 替换成你的Exchange服务器信息和登录凭据
$client = new Client(
    'https://your-exchange-server-url/EWS/Exchange.asmx',
    'your-domain\username',
    'your-password'
);
// 根据你的Exchange版本调整,比如2013/2016/Online
$client->setVersion(Client::VERSION_EXCHANGE_2016);

然后是获取签名的核心代码:

try {
    // 构造获取签名配置的请求
    $request = new GetUserConfigurationRequest();
    $request->UserConfigurationName->Name = 'Signatures';
    // 指定从根文件夹获取配置
    $request->UserConfigurationName->DistinguishedFolderId->Id = 'root';
    // 请求所有配置属性,包含签名的XML数据
    $request->Properties = ['All'];

    $response = $client->GetUserConfiguration($request);

    // 检查请求是否成功
    if ($response->ResponseMessages->GetUserConfigurationResponseMessage->ResponseCode === 'NoError') {
        $userConfig = $response->ResponseMessages->GetUserConfigurationResponseMessage->UserConfiguration;
        // 签名数据以XML格式存储在XmlData属性中
        $xmlData = $userConfig->XmlData;
        $signatureXml = simplexml_load_string($xmlData);

        // 解析XML,提取默认签名
        $defaultHtmlSignature = '';
        $defaultTextSignature = '';

        foreach ($signatureXml->Signatures->Signature as $signature) {
            $isDefault = (string) $signature->IsDefault;
            if ($isDefault === 'true') {
                $defaultHtmlSignature = (string) $signature->Html;
                $defaultTextSignature = (string) $signature->Text;
                break;
            }
        }

        // 现在你就拿到了用户的默认签名,发送新邮件时直接拼到内容末尾即可
        echo "默认HTML签名:<br>" . $defaultHtmlSignature;
        // echo "默认纯文本签名:" . $defaultTextSignature;
    } else {
        echo "获取签名失败,错误码:" . $response->ResponseMessages->GetUserConfigurationResponseMessage->ResponseCode;
    }
} catch (Exception $e) {
    echo "请求过程出错:" . $e->getMessage();
}

注意事项

  • Exchange版本适配:不同版本的Exchange返回的签名XML结构可能略有差异,如果上面的解析逻辑不生效,可以先打印$xmlData查看实际结构,再调整解析代码。
  • 多签名处理:如果用户有多个签名,你可以遍历所有Signature节点,让用户选择使用哪一个,而不是只取默认的。
  • 权限问题:确保登录用户有访问自身用户配置的权限,通常登录自己的邮箱账号是没问题的。
  • PHP-EWS版本:建议使用最新版的PHP-EWS库,旧版本可能对GetUserConfiguration接口的支持不完善。

发送新邮件时,只需要把获取到的签名拼接到邮件内容的末尾即可(HTML邮件用HTML签名,纯文本邮件用文本签名),比如:

// 假设你已经构造好新邮件的内容
$newMailHtmlContent = "这是邮件正文..." . $defaultHtmlSignature;

内容的提问来源于stack exchange,提问作者Daniel Bäuerlein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:36:45