.NET下发同Outlook邮件格式以及表格的拼接

如题,我们常见的需求业务手拟一封邮件,里面可能包含特定颜色的表头,表格,特定字体的话术,类似这样:

 那么如何实现把outlook特定的邮件格式通过代码发出就尤为关键,如果一步步手写样式肯定会很慢。

解决方案:(此方案是为了信原封不动搬到.htm模板上,并且不会中文乱码)

首先把Outlook邮件copy到一个word文档中,另存为Single File Web Page(*.mht,*.mhtml),在把此文件用IE打开,F10另存为 网页,全部(*.htm;*.html),编码存为Unicode(UTF-8),这样再拖拽到代码当中做邮件模板,就可发出和客户给过来的相同的邮件样式。

问题:

IE已经官宣退役的情况下,怎么在Win11下打开IE浏览器:

桌面新建一个.txt文本文档,输入下面一行代码:

CreateObject("InternetExplorer.Application").Visible=true

保存,更改后缀为.vbs,双击此文件,就会打开一个空页面的IE浏览器,把保存好的.mht拖拽到新打开的IE窗口,即可打开.mht文件,即可F10另存为UTF-8编码格式的.htm文件。

另存htm模板,

 

 

表格是根据数据源行数决定的,表格拼接部分思路是根据模板里生成的表格代码,用循环语句动态拼接表头,每一行,闭合标签等,具体参考代码样例:

		string tableHeader = @"<TABLE class=MsoNormalTable 
style='BORDER-TOP: medium none; BORDER-RIGHT: medium none; WIDTH: 432.05pt; BORDER-COLLAPSE: collapse; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext' 
cellSpacing=0 cellPadding=0 width=576 border=1>
  <TBODY>
  <TR style='HEIGHT: 23pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes'>
    <TD 
    style='BORDER-TOP: windowtext 1pt solid; HEIGHT: 23pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BACKGROUND: #00b0f0; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt' 
    vAlign=top width=106>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif'>Company 
      Code<o:p></o:p></SPAN></B></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: windowtext 1pt solid; HEIGHT: 23pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BACKGROUND: #00b0f0; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt' 
    vAlign=top width=106>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif; COLOR: black'>Account</SPAN></B></SPAN><SPAN 
      style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif'><o:p></o:p></SPAN></B></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: windowtext 1pt solid; HEIGHT: 23pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BACKGROUND: #00b0f0; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt' 
    vAlign=top width=106>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif; COLOR: black'>Name</SPAN></B></SPAN><SPAN 
      style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif'><o:p></o:p></SPAN></B></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: windowtext 1pt solid; HEIGHT: 23pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BACKGROUND: #00b0f0; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt' 
    vAlign=top width=106>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif; COLOR: black'>Grand 
      Total </SPAN></B></SPAN><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif'><o:p></o:p></SPAN></B></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: windowtext 1pt solid; HEIGHT: 23pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 115.25pt; BACKGROUND: #00b0f0; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT: medium none; PADDING-RIGHT: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt' 
    vAlign=top width=154>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><B><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Arial',sans-serif; COLOR: black'>Refund 
      Reason<o:p></o:p></SPAN></B></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN></TR>";

            string tableHeaderEnd = "</TABLE>";

            string tbodyStart = "<TBODY>";
            string tbodyEnd = "</TBODY>";

            for (int i = 0; i < result.Count; i++)
            {
                tr += @"<TR style='HEIGHT: 14pt; mso-yfti-irow: " + i + 1 + @"'>
    <TD 
    style='BORDER-TOP: medium none; HEIGHT: 14pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt' 
    vAlign=top width=106 noWrap>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><SPAN 
      style='FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri'>" + result[i].CompanyCode + @"<o:p></o:p></SPAN></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: medium none; HEIGHT: 14pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt' 
    vAlign=top width=106 noWrap>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><SPAN 
      style='FONT-SIZE: 10pt'>" + result[i].PersonnelNo + @"<o:p></o:p></SPAN></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: medium none; HEIGHT: 14pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt' 
    vAlign=top width=106 noWrap>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><SPAN 
      class=SpellE><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Segoe UI',sans-serif'>" + result[i].Name + @"</SPAN></SPAN></SPAN><SPAN 
      style='mso-bookmark: _MailAutoSig'><SPAN 
      style='FONT-SIZE: 9pt; FONT-FAMILY: 'Segoe UI',sans-serif'><o:p></o:p></SPAN></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: medium none; HEIGHT: 14pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 79.2pt; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 5.4pt; BORDER-LEFT: medium none; PADDING-RIGHT: 5.4pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt' 
    vAlign=top width=106 noWrap>
      <P class=MsoNormal style='TEXT-ALIGN: right' align=right><SPAN 
      style='mso-bookmark: _MailAutoSig'><SPAN 
      style='FONT-SIZE: 10pt'>" + result[i].GrandTotal + @"<o:p></o:p></SPAN></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN>
    <TD 
    style='BORDER-TOP: medium none; HEIGHT: 14pt; BORDER-RIGHT: windowtext 1pt solid; WIDTH: 115.25pt; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0cm; PADDING-TOP: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT: medium none; PADDING-RIGHT: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt' 
    vAlign=top width=154>
      <P class=MsoNormal><SPAN style='mso-bookmark: _MailAutoSig'><SPAN 
      style='FONT-SIZE: 10pt'>" + result[i].DBReason + @"<o:p></o:p></SPAN></SPAN></P></TD><SPAN 
    style='mso-bookmark: _MailAutoSig'></SPAN></TR>";

            }

            tablehtml = tableHeader + tbodyStart + tr + tbodyEnd + tableHeaderEnd;

表格拼接字符串和模板中表格占位符##Table##做替换:

Table表个结构可以结合浏览器打开.htm观察Html代码层级关系,辅助拼接:

 

我们看到是Table标签包含tbody包含tr标签组成的表格,最终还是tr td这样,不管是Jquery的Datatable,bootstrap table底层都是这种东西实现的。 

最终发出的信:

 进攻学习参考,如有侵权联系我删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值