首页 > 解决方案 > sendmailR 在 HTML 正文中添加额外的空间,偶尔会破坏 HTML 标签

问题描述

我为团队中的人员自动生成了个性化报告,效果很好!

唯一的问题是某些电子邮件偶尔会在 HTML 正文中间有一个额外的空间。有时,这些额外空间的位置会破坏并暴露 HTML 标记:

例如,“Consul invidunt”会读作“Consul invi dunt”。或者更糟糕的是,它会读取“< p> Consul invidunt”,并且由于额外的空间而暴露了段落标签。

唯一有效的就是制造“空间陷阱”。例如,<p> </p>在段落之后添加并希望额外的段落“落在”段落的中间,这只是一堆空格。但它并不总是有效。

由于正文中间的数据框和收件人姓名是可变的,因此此问题仅发生在某些收件人身上。那些有故障的接收者会根据我在正文中输入的内容而变化,我是否尝试用“空间陷阱”来“捕捉”空间等。

奇怪的是,如果我将 HTML 粘贴bodyhtml[['text']]到 HTML 编辑器中,HTML 看起来很完美!

我还检查了这是否是 Outlook 的问题,但发送到 gmail 时问题仍然存在。

这基本上是我的代码:

bodyhtml <- sendmailR::mime_part(paste0(
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>",
"<html xmlns='http://www.w3.org/1999/xhtml'>",
"<head>",
"<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>",
"<meta name='viewport' content='width=100%, initial-scale=1.0'/>",
"<style>",
"p { font-size: 95% }",
"table {border-collapse: collapse;}",
"th {background-color: #D3D3D3;}",
"tr:nth-child(odd) {background-color: #dfe7f2;}",
"</style>",
"</head>",
"<body>",
"<br>",
"<p>Hi ",recipient_name,",</p>",
"<br>",
"<div>",
"<p>Check out this awesome report as of <i>",report_date,"</i>.</p>",
"<p>Lorem ipsum dolor sit amet, iudico quidam aliquid eos et, eam no vero democritum, ",
"no tempor laoreet indoctum sea. Cu malis persequeris has, duo an viris labitur pertinax, inani ignota molestiae sea eu. ",
"Pri et hinc quodsi. Ut ius dico animal sapientem. Cum ut vitae officiis definitionem. Sed ex atqui delectus, ",
"ea nulla diceret usu, liber eripuit te usu.</p>",
"</div>",
"<div>",
"<br>",
"<br>",
"</div>",
"<div>",
"<p>Consul invidunt expetendis has in, mea nemore habemus at, nibh eligendi tincidunt ex sit.:</p>",
"<ul>",
"<li><b>Primo</b></li>",
"<ul>",
"<li>Aeterno reprimique ea his. Pro ad brute dicat. Id eos habeo dicta tempor, ei perpetua scripserit theophrastus sed.</li>",
"</ul>",
"<li><b>Secundus</b></li>",
"<ul>",
"<li>Aeterno reprimique ea his. Pro ad brute dicat. Id eos habeo dicta tempor, ei perpetua scripserit theophrastus sed.</li>",
"</ul>",
"<li><b>Tertius</b></li>",
"<ul>",
"<li>Aeterno reprimique ea his. Pro ad brute dicat. Id eos habeo dicta tempor, ei perpetua scripserit theophrastus sed.</li>",
"</ul>",
"</ul>",
"</div>",
"<br>",
"<br>",
"<br>",
"<div>",
"<h2 style='color:#3b5998'>Primo</h2>",
"<p><i>(Up to 10 --see attachment for full list).</i></p>",
df_html1,
"<br>",
"<br>",
"<h2 style='color:#3b5998'>Secundus</h2>",
"<p><i>(Up to 10 --see attachment for full list).</i></p>",
df_html2,
"<br>",
"<br>",
"<h2 style='color:#3b5998'>Tertius</h2>",
"<p><i>(Up to 10 --see attachment for full list).</i></p>",
df_html3,
"</div>",
"<br>",
"<br>",
"<p style='color:#3b5998'>For further details, check out the ",
"<a href='https://www.mywebsite.com/dashboard'> dashboard</a>",
"<p style='color:#3b5998'>Questions? Comments? Reply directly to this email!</p>",
"<p style='color:#8b9dc3'>My Team Name</p>",
"<br>",
"<br>",
"</body>",
'</html>'
))

bodyhtml[["headers"]][["Content-Type"]] <- "text/html"

msg <- c(bodyhtml, sendmailR::mime_part("my_file_path.xlsx"))


sendmailR::sendmail(from = "me@email.com",
                    to = "you@email.com",
                    subject = "my subject line",
                    msg = msg)

有人有什么想法吗?请帮忙!

标签: htmlcssrdoctypesendmailr

解决方案


我替换了前两行(DOCTYPE 和 html 标签),这似乎成功了!

"<!DOCTYPE html>",
"<html xmlns='http://www.w3.org/1999/xhtml' lang='en'>",

我发现这些链接很有帮助:


推荐阅读