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

.NET C#中如何将.msg文件转换为Exchange.EmailMessage对象

将本地.msg文件转换为Exchange.EmailMessage对象的可行方案

核心说明

无法直接将MsgReader解析的本地邮件对象转换为Microsoft.Exchange.WebServices.Data.EmailMessage,因为二者分属不同技术栈:前者是本地.msg文件的解析模型,后者是Exchange Web Services(EWS)的服务器端邮件对象。必须通过手动属性映射实现转换。

具体实现步骤

  • 1. 使用MsgReader解析本地.msg文件
    先读取.msg文件并提取所需的邮件属性(主题、发件人、收件人、正文、附件等):

    using MsgReader.Outlook;
    
    // 读取本地.msg文件
    using var msgStorage = new Storage.Message(@"C:\path\to\your\email.msg");
    
    // 提取核心属性
    var subject = msgStorage.Subject;
    var senderEmail = msgStorage.SenderEmail;
    var toRecipients = msgStorage.Recipients.Select(r => r.Email).ToList();
    var emailBody = msgStorage.BodyHtml ?? msgStorage.BodyText;
    var sentTime = msgStorage.SentOn;
    
  • 2. 初始化EWS服务并创建EmailMessage对象
    配置EWS连接后,创建EmailMessage实例并将提取的属性逐一映射:

    using Microsoft.Exchange.WebServices.Data;
    
    // 初始化EWS服务(需替换为你的Exchange配置)
    var ewsService = new ExchangeService(ExchangeVersion.Exchange2019);
    ewsService.Credentials = new WebCredentials("your-username", "your-password");
    ewsService.Url = new Uri("https://your-exchange-server-url/EWS/Exchange.asmx");
    
    // 创建空的EmailMessage对象
    var ewsEmail = new EmailMessage(ewsService);
    
    // 映射基础属性
    ewsEmail.Subject = subject;
    ewsEmail.From = new EmailAddress(senderEmail);
    toRecipients.ForEach(addr => ewsEmail.ToRecipients.Add(addr));
    ewsEmail.Body = new MessageBody(string.IsNullOrEmpty(emailBody) ? BodyType.Text : BodyType.HTML, emailBody);
    ewsEmail.DateTimeSent = sentTime;
    
    // 映射附件(如果有)
    foreach (var attachment in msgStorage.Attachments)
    {
        if (attachment is Storage.Attachment.FileAttachment fileAtt)
        {
            ewsEmail.Attachments.AddFileAttachment(fileAtt.FileName, fileAtt.Data);
        }
    }
    
  • 3. 执行后续操作
    属性映射完成后,即可对EmailMessage执行EWS支持的操作,比如保存到服务器、遍历属性等:

    // 保存到Exchange草稿箱
    ewsEmail.Save(WellKnownFolderName.Drafts);
    
    // 遍历收件人列表示例
    foreach (var recipient in ewsEmail.ToRecipients)
    {
        Console.WriteLine($"Recipient: {recipient.Name} <{recipient.Address}>");
    }
    

关键注意事项

  • 确保使用的MsgReader版本与.NET环境兼容,避免解析异常;
  • EWS服务需配置正确的权限和服务器地址,否则无法创建或操作EmailMessage;
  • 对于.msg文件中的自定义字段、密件抄送等特殊属性,需补充对应的映射逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:34