如何在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
相关产品推荐
相关产品推荐

