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

使用EWS C#发送视频附件时出现XML解析错误求助

解决EWS发送带多媒体附件邮件时的XML序列化错误

这个问题我之前帮同事排查过类似场景,大概率是EWS自动识别多媒体附件的MIME类型出了偏差,或者二进制流处理不当,导致服务端返回的XML响应无法正常解析。给你几个针对性的解决方案:

可能的原因&解决步骤

1. 手动指定正确的MIME类型

EWS的自动MIME类型识别对部分多媒体文件(比如mp4、png)经常会出现识别错误的情况,这会导致Exchange服务端无法正确解析附件,进而返回异常的XML响应。解决方法是手动设置Attachment的ContentType属性,对应常见多媒体类型:

  • .jpg/.jpeg → image/jpeg
  • .png → image/png
  • .mp4 → video/mp4

示例代码:

var imageAttachment = new FileAttachment(ewsService, @"C:\test.png");
imageAttachment.ContentType = "image/png"; // 强制指定正确的MIME类型
imageAttachment.Name = "test.png";
mailMessage.Attachments.Add(imageAttachment);

2. 确保二进制流的正确读取

如果使用StreamAttachment添加附件,务必用二进制模式读取文件流,绝对不能用文本编码方式处理多媒体文件(会破坏二进制内容,导致服务端解析失败)。示例:

using (var stream = new FileStream(@"C:\demo.mp4", FileMode.Open, FileAccess.Read))
{
    var videoAttachment = new StreamAttachment(ewsService, "demo.mp4", stream);
    videoAttachment.ContentType = "video/mp4";
    mailMessage.Attachments.Add(videoAttachment);
}

3. 升级EWS Managed API版本

旧版本的EWS API(比如2.0及更早)存在部分多媒体附件处理的bug,建议升级到最新的稳定版本。可以通过NuGet安装Microsoft.Exchange.WebServices包,确保版本≥2.2。

4. 检查Exchange服务器兼容性

如果你的Exchange服务器是较旧版本(如Exchange 2010),可能对新的多媒体MIME类型支持有限。可以尝试直接读取文件字节数组添加附件(这种方式兼容性更好):

byte[] fileBytes = File.ReadAllBytes(@"C:\test.jpg");
var attachment = new FileAttachment(ewsService, "test.jpg", fileBytes);
attachment.ContentType = "image/jpeg";
mailMessage.Attachments.Add(attachment);

完整可运行示例代码

using Microsoft.Exchange.WebServices.Data;
using System;
using System.IO;

class EwsMultimediaEmailSender
{
    static void Main(string[] args)
    {
        // 初始化EWS服务实例
        var ewsService = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
        ewsService.Credentials = new WebCredentials("your-account@domain.com", "your-password");
        ewsService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"); // 替换为你的Exchange服务地址

        // 创建邮件对象
        var mail = new EmailMessage(ewsService);
        mail.ToRecipients.Add("recipient@domain.com");
        mail.Subject = "测试多媒体附件邮件";
        mail.Body = new MessageBody(BodyType.HTML, "<h3>这是一封带有图片和视频的测试邮件</h3>");

        // 添加PNG图片附件
        var pngAttachment = new FileAttachment(ewsService, @"C:\sample.png");
        pngAttachment.ContentType = "image/png";
        pngAttachment.Name = "sample.png";
        mail.Attachments.Add(pngAttachment);

        // 添加MP4视频附件(字节数组方式)
        byte[] videoBytes = File.ReadAllBytes(@"C:\demo.mp4");
        var videoAttachment = new FileAttachment(ewsService, "demo.mp4", videoBytes);
        videoAttachment.ContentType = "video/mp4";
        mail.Attachments.Add(videoAttachment);

        try
        {
            mail.Send();
            Console.WriteLine("邮件发送成功!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发送失败:{ex.Message}\n{ex.InnerException?.Message}");
        }
    }
}

内容的提问来源于stack exchange,提问作者Ziad Antar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:47:44