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

PowerShell调用Graph API发邮件HTML截断、TEXT空格折叠问题咨询

Microsoft Graph API 邮件发送异常修复方案

1. HTML格式正文截断、标签明文显示问题修复

  • 根因:请求体JSON序列化异常/内容被截断,常见于VBA直接通过命令行传参给PowerShell时触发命令行长度限制,或是内容中的特殊字符打断JSON结构
  • 操作步骤:
    • VBA侧禁止通过命令行参数传递正文内容,改为写入临时文本文件,PowerShell侧读取临时文件获取完整正文,规避命令行长度截断问题
    • PowerShell构造请求体时强制使用ConvertTo-Json自动处理转义,禁止手动拼接JSON字符串,参考代码:
    # 读取VBA写入的临时文件获取正文
    $htmlContent = Get-Content -Path "C:\temp\mail_body.tmp" -Raw -Encoding UTF8
    $mailParams = @{
      message = @{
        subject = $mailSubject
        body = @{
          contentType = "HTML"
          content = $htmlContent
        }
        toRecipients = @(@{
          emailAddress = @{ address = $recipientMail }
        })
      }
      saveToSentItems = $true
    }
    # 序列化时指定足够深度避免结构截断
    $requestBody = $mailParams | ConvertTo-Json -Depth 10
    
    • VBA构造HTML时提前转义特殊字符:将"替换为&quot;、&替换为&amp;、</>替换为&lt;/&gt;

2. TEXT格式空格折叠、Char(160)明文显示问题修复

  • 根因:纯文本邮件默认遵循RFC 2646的flowed text规范,连续空格会被自动折叠;Char(160)是HTML专有的非断空格实体,纯文本模式下不会被渲染为空格
  • 操作步骤:
    • 放弃替换Char(32)为Char(160)的方案,若必须使用纯文本格式,在需要保留的连续空格前添加ASCII 13软换行符,或是将行首空格替换为制表符\t
    • 更简单的兼容方案:仍使用HTML格式,将纯文本内容包裹在<pre>标签中,自动保留所有空格、换行排版,无需额外处理:
    <pre style="font-family: Consolas, monospace; margin: 0;">
    你的原纯文本内容,所有空格、换行都会原样保留
    </pre>
    
    • 若坚持使用纯TEXT格式,调用Graph API时添加请求头Prefer: outlook.body-content-type="text",同时确保正文内容编码为UTF-8无BOM格式

内容的提问来源于stack exchange,提问作者Dan Mumford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:05