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

如何在ASP.NET Core中保留Word模板格式发送邮件

问题

我有一个包含表格、左右缩进文本及若干段落的template.docx模板,希望发送邮件时保留原文档的结构与格式。目前我的代码可以正确解析文档内容,但无法保留缩进、表格样式等格式信息。

当前代码

public async Task SendEmail(User receiver)
{
    var user = "...@mail.com";
    var password = Environment.GetEnvironmentVariable("EMAIL_PASSWORD");

    string emailTemplateFilePath = "..path..\\template.docx";

    // Load the Word document template
    using (var doc = WordprocessingDocument.Open(emailTemplateFilePath, false))
    {
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress(user));
        message.To.Add(new MailboxAddress(receiver.FullName, receiver.EmailAddress));
        message.Subject = "Subject";

        var bodyBuilder = new BodyBuilder();

        // Read the content of the Word document template with OpenXmlReader
        using (var reader = OpenXmlReader.Create(doc.MainDocumentPart.Document))
        {
            while (reader.Read())
            {
                if (reader.ElementType == typeof(Paragraph))
                {
                    var paragraph = (Paragraph)reader.LoadCurrentElement();
                    string paragraphText = string.Join("", paragraph.Descendants<Text>().Select(t => t.Text));

                    bodyBuilder.TextBody += paragraphText + Environment.NewLine;
                }
                else if (reader.ElementType == typeof(Table))
                {
                    var table = (Table)reader.LoadCurrentElement();
                    foreach (var row in table.Descendants<TableRow>())
                    {
                        var rowText = "";
                        foreach (var cell in row.Descendants<TableCell>())
                        {
                            rowText += string.Join("", cell.Descendants<Text>().Select(t => t.Text)) + "\t";
                        }

                        bodyBuilder.TextBody += rowText.TrimEnd('	') + Environment.NewLine;
                    }
                }
            }
        }

        message.Body = bodyBuilder.ToMessageBody();

        // Send the email using MailKit
        using (var client = new SmtpClient())
        {
            await client.ConnectAsync("host", 587, SecureSocketOptions.StartTls);
            await client.AuthenticateAsync(user, password);
            await client.SendAsync(message);
            await client.DisconnectAsync(true);
        }
    }
}

模板样式说明

表格样式

表格样式

模板文件整体样式

模板文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:33