借助Aspose.Email、用C# 渲染 HTML 格式 电子邮件

news2024/11/16 18:04:21

对于构建电子邮件通信应用程序的开发人员来说,电子邮件渲染对于确保通过应用程序发送的电子邮件在不同的电子邮件客户端、设备和设置中正确且一致地显示至关重要。

为了有效地执行此任务,Aspose.Email for .NET提供了多种功能,用于格式化和自定义 HTML 格式的电子邮件内容。在本文中,我们将探讨如何使用 C# 代码示例以 HTML 格式呈现电子邮件内容,其中包括各种自定义选项,以便在各种电子邮件客户端或浏览器中正确显示。

Aspose.Email 是用于轻松的开发 email 功能的应用程序的一组控件,基于  ASP.NET 的Web应用、Web服务和Windows 应用。支持 Outlook PST, EML, MSG, and MHT 格式. 允许开发者直接与 SMTP, POP, FTP, 和 MS Exchange 服务器进行工作。支持邮件合并、行事历、定制邮件标题和内容、嵌入文件等,Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。

Aspose.Email 最新下载   

使用 C# API 以 HTML 格式呈现电子邮件

我们将使用 API 将 .eml 或 .msg 消息渲染为 HTML 格式,它是综合库的一部分,为开发人员提供了在 .NET 应用程序中创建、操作和渲染电子邮件消息的强大工具。Aspose.Email for .NET使开发人员能够在其 C# 应用程序中高效处理各种与电子邮件相关的任务,使其成为满足电子邮件处理需求的宝贵资源。

基本电子邮件渲染

让我们从使用 C# 以 HTML 格式呈现电子邮件的基本示例开始。此代码片段演示了如何从文件加载电子邮件消息、指定 HTML 格式选项以及以 HTML 格式保存消息。

  1. 创建HtmlSaveOptions实例来指定格式首选项。HtmlFormatOptions.WriteHeader确保标题包含在输出 HTML 文件中。
  2. 使用MailMessage.Load从文件加载电子邮件消息。
  3. 最后,使用Save方法以 HTML 格式保存消息。
var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader
};

var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

因此,消息 HTML 内容将如下所示:

基本电子邮件渲染

自定义标题显示

接下来,让我们探索如何自定义电子邮件标题的显示。以下代码示例演示了如何在以 HTML 格式呈现电子邮件之前删除特定标题(例如主题)。

var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader
};

options.RenderingHeaders.Remove("Subject");
var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

在这里,我们修改HtmlSaveOptions的RenderingHeaders集合以从呈现的 HTML 输出中排除主题标题。

排除主题标头

格式化日期和时间

时间戳通常需要格式化以确保清晰度和一致性。以下代码示例演示了如何在以 HTML 格式呈现电子邮件之前自定义日期和时间格式。

var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader,
FormatTemplates =
{
[MhtTemplateName.DateTime] = "ddd, d MMM yyyy hh:mm"
}
};

var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

通过使用FormatTemplates属性指定自定义日期和时间格式,我们确保以用户友好的方式呈现时间戳。

自定义日期和时间

本地化和翻译

本地化对于确保全球受众都能理解电子邮件字段名称至关重要。此示例演示了如何通过将标准术语替换为翻译的等效术语来本地化电子邮件标头名称。

var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader
};

options.FormatTemplates[MhtTemplateName.From] = options.FormatTemplates[MhtTemplateName.From].Replace("From:", "De :");
options.FormatTemplates[MhtTemplateName.Sent] = options.FormatTemplates[MhtTemplateName.Sent].Replace("Sent:", "Envoyé :");

var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

在这里,我们用法语标签替换英文标题标签,以满足法语观众的需求。

自定义字段名称

邮件内容样式

样式在增强电子邮件内容的视觉吸引力方面起着至关重要的作用。下面的代码示例演示了如何在以 HTML 格式呈现电子邮件内容之前将自定义 CSS 样式应用于电子邮件内容。

var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader
};

int index = options.CssStyles.IndexOf("</style>");
options.CssStyles = options.CssStyles.Insert(index, @"
.headerLineTitle
{
font-family:""Calibri"";
font-size:18.0pt;
}");

var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

通过在 HTML 输出中插入自定义 CSS 规则,我们可以增强电子邮件信息的美感和品牌效应。

应用自定义 CSS 样式

高级格式化技术

最后,让我们探索电子邮件渲染的高级格式化技术。代码示例演示了如何定义自定义表格布局以显示 HTML 格式的电子邮件标题。

var options = new HtmlSaveOptions
{
HtmlFormatOptions = HtmlFormatOptions.WriteHeader,
BeforeHeadersFormat = "<table style=\"width: 800px; background-color: #dddddd\">",
DefaultHeaderFormat = "<tr><td style=\"vertical-align: top; width:150px\"><b>{0}:</b></td><td style=\"vertical-align: top; width:150px\">{{0}}</td></tr>",
AfterHeadersFormat = "</table>"
};

var msg = MailMessage.Load(fileName);
msg.Save(outFileName, options);

通过为标题部分定义自定义 HTML 标记(包括表格布局),我们可以创建视觉上引人注目的电子邮件模板。

结论

在本教程中,我们探索了如何使用 Aspose.Email for .NET 以 HTML 格式呈现电子邮件内容。此工具可确保电子邮件在各种客户端和设备上正确显示,这对于构建电子邮件通信应用程序的开发人员来说是一项至关重要的任务。我们从基本的电子邮件呈现开始,演示如何以 HTML 格式加载和保存电子邮件。然后,我们自定义了标题,例如删除主题行,并格式化了时间戳以确保清晰度和一致性。

课程涵盖了本地化和翻译,展示了如何用本地化版本替换标准电子邮件字段名称,以满足全球受众的需求。课程还应用了自定义 CSS 样式来增强电子邮件的视觉吸引力,确保它们既实用又美观。最后,我们研究了高级格式化技术,包括为电子邮件标题定义自定义 HTML 布局以创建视觉上引人注目的模板。这些技术使开发人员能够使用 Aspose.Email for .NET 制作高度定制和专业的电子邮件内容。

使用 Aspose.Email for .NET,开发人员可以有效地管理各种电子邮件处理需求,确保他们的应用程序为用户提供无缝、精致的电子邮件体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Primer Plus(速记版)-容器和算法

第九章 顺序容器 容器是存储特定类型对象的集合&#xff0c;标准库提供了多种容器类型以支持不同的使用场景。其中&#xff0c;顺序容器&#xff08;如vector、list、deque&#xff09;根据元素添加到容器中的顺序来存储和访问元素&#xff0c;与元素值无关。 这些顺序容器各有…

昆仑通态触摸屏——历史曲线XY轴调节功能

目录 1、添加参数 2、规划界面 3、编写脚本 4、结果演示 前言 在工程中有时会遇到因环境等变化而导致参数波动较大&#xff0c;对于这种参数我们想要在触摸屏中直观地看到变化的趋势&#xff0c;就需要比较大的显示屏或者可调节的曲线显示。但是在历史曲线的设置中没有直接…

MySQL底层为什么选择用B+树作为索引

首先&#xff0c;我们来想想为什么这么多数据结构&#xff0c;为什么要用树这种数据结构&#xff1f; 众多的数据结构在逻辑层面可分为&#xff1a;线性结构 和 非线性结构。 线性结构有&#xff1a;数组、链表&#xff0c;基于它们衍生出的有哈希表&#xff08;哈希表也称散…

01_Python基本语法

Hello Python 与其他编程一样&#xff0c;第一个程序都是输出Hello World!。 print("Hello World!")print() 函数由两部分构成 &#xff1a; 指令&#xff1a;print指令的执行对象&#xff0c;在 print 后面的括号里的内容 Hello World!。 Python程序的执行流程如…

JS - 获取剪切板内容 Clipboard API

目录 1&#xff0c;需求最终效果 2&#xff0c;实现示例 3&#xff0c;注意点1&#xff0c;只支持安全上下文环境2&#xff0c;只能读取当前页面的剪切板3&#xff0c;权限获取问题4&#xff0c;获取内容的 MIME_TYPE 问题1&#xff0c;文本内容2&#xff0c;图片内容 5&#x…

深入MySQL的索引实践及优化

文章目录 一、什么是索引二、数据结构——为什么是B树平衡二叉查找树红黑树B树&#xff08;多叉&#xff09;B树&#xff08;多叉&#xff09; 三、MySQL索引实战1.索引创建(1)自动创建索引(2)手动创建非聚簇索引(3)索引的代价 2.B树索引原则&#xff08;1&#xff09;等值匹配…

make 程序规定的 makefile 文件的书写语法(4)

&#xff08;29&#xff09;接着学习 make 支持的变量追加操作&#xff0c; &#xff0c; 在变量的原有字符串的基础上&#xff0c;再追加字符串&#xff0c;并用一个空格隔开&#xff1a; &#xff08;30&#xff09;再学习 make 的语法&#xff0c;shell 运行赋值&#xff1…

关于Redis缓存一致性问题的优化和实践

目录标题 导语正文分布式场景下无法做到强一致即使是达到最终一致性也很难缓存的一致性问题缓存是如何写入的 如何感知数据库的变化最佳实践一&#xff1a;数据库变更后失效缓存最佳实践二&#xff1a;带版本写入 总结与展望阿里XKV腾讯DCache 导语 Redis缓存一致性的问题是经…

大模型→世界模型下的「认知流形」本质·下

本篇内容节选自今年初我撰写的那篇10万的文章《融合RL与LLM思想&#xff0c;探寻世界模型以迈向AGI》&#xff0c;其观点也是文章中核心中的核心。 想进一步完整阅读的小伙伴可关注评论&#xff0c;节选内容如下↓ 接上篇..“因此当前无论对先验自回归学习下的LLMs也好还是未来…

ASR(自动语音识别)识别文本效果的打分总结

ASR(自动语音识别)识别文本效果的打分总结 1. 词错误率(WER, Word Error Rate)2. 字正确率(W.Corr, Word Correct)3. 编辑距离(Edit Distance)4. 特定错误率5. 句子错误率(SER, Sentence Error Rate)6. 基于模型的评估方法对于ASR(自动语音识别)识别文本效果的打分…

【python】python中非对称加密算法RSA实现原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

9.13 DFSBFS 简单 101 Symmetric Tree 104 Maximum Depth of Binary Tree

101 Symmetric Tree class Solution { public:// 比较两个向量是否镜像对称bool isIdentical(const std::vector<int>& n1, const std::vector<int>& n2) {int n n1.size();for (int i 0; i < n; i) {if (n1[i] ! n2[n - i - 1]) return false; // 镜…

AV1 Bitstream Decoding Process Specification--[2]:符号和缩写术语

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码器…

通过LiveGBS实现安防监控摄像头GB28181转成WebRTC流实现web浏览器网页无插件低延迟直播...

目录 1、WebRTC超低延时直播2、WebRTC延时对比3、LiveGBS的低延时的WebRTC流4、分屏页面如何选择默认播放流5、无法播放Webrtc6、搭建GB28181视频直播平台 1、WebRTC超低延时直播 需要低延时的视频流监控播放&#xff0c;之前可以用rtmp的低延时播放(1秒左右)&#xff0c;随着浏…

三星ZFlip5/ZFlip4/W7024刷安卓14国行OneUI6.1系统-高级设置-韩/欧/港版

三星ZFlip5/ZFlip4/W7024系列手机&#xff0c;基本都是高端玩家的一个产品&#xff0c;目前虽然国内销量不 如其他品牌&#xff0c;但依旧表现不错&#xff0c;并且大家都不知道三星全球第一&#xff0c;自然在国外销量也比较OK 由于三星全部设备基本都支持解锁BL&#xff08;美…

Spring Boot基础

项目创建 项目启动 请求响应 RestController 1.返回值处理 RestController&#xff1a;这个注解结合了Controller和ResponseBody的功能。它默认将所有处理请求的方法的返回值直接作为响应体内容返回&#xff0c;主要用于构建RESTful API。返回的数据格式通常是JSON或XML&…

vue使用TreeSelect设置带所有父级节点的回显

Element Plus的el-tree-select组件 思路&#xff1a; 选中节点时&#xff0c;给选中的节点赋值 pathLabel&#xff0c;pathLabel 为函数生成的节点名字拼接&#xff0c;数据源中不包含。 在el-tree-select组件中设置 props“{ label: ‘pathLabel’ }” 控制选中时input框中回…

商务办公tips1:如何将网页转换为pdf

​ 场景需求&#xff1a; 商务轻办公人士获取网页内容&#xff0c;并且最好是pdf版本&#xff1f; 将网页转换为PDF的需求可能出现在多种场景中&#xff0c;以下是一些可能的情况&#xff1a; 学术研究&#xff1a;研究人员可能需要将某个学术网站的全文内容保存为PDF格式&a…

sqlgun靶场训练

1.看到php&#xff1f;id &#xff0c;然后刚好有个框&#xff0c;直接测试sql注入 2.发现输入1 union select 1,2,3#的时候在2处有回显 3.查看表名 -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()# 4.查看列名…

【计网】从零开始使用UDP进行socket编程 --- 客户端与服务端的通信实现

人生不过如此&#xff0c;且行且珍惜。 自己永远是自己的主角&#xff0c; 不要总在别人的戏剧里充当着配角。 --- 林语堂 --- 从零开始学习socket编程---UDP协议 1 客户端与服务端的通信2 设计UDP服务器类2.1 基础框架设计2.2 初始化函数2.3 启动函数 3 设计客户端 1 客户…