【问题标题】:Not able to print in HTML Table format in mail body无法在邮件正文中以 HTML 表格格式打印
【发布时间】:2019-10-07 07:48:36
【问题描述】:

我有一个场景,我将 CSV 文件转换为 HTML 文件,然后使用 Sendmail 将 HTML 表格格式数据打印到邮件正文。但是输出的格式不正确

.csv 文件中的数据如下

A1,ABC,BCD
A2,DEF,AB

用于将 .csv 转换为 HTML 文件的代码

awk 'BEGIN{
FS=","
print  "MIME-Version: 1.0"
print  "Content-Type: text/html"
print  "Content-Disposition: inline"
print  "<HTML>""<TABLE border="1"><TH>NAME</TH><TH>CITY</TH><TH>COURSE</TH>" 
}
 {
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
 }
END{
print "</TABLE></BODY></HTML>"
 }
' /demo/data.csv > /demo/demofolder/demofile.html

以 HTML 表格格式打印数据的代码

(
echo "From: example@abc.com "
echo "To: example@abc.com "
echo "MIME-Version: 1.0"
echo "Subject: Test HTML e-mail." 
echo "Content-Type: text/html" 
cat /demo/demofolder/demofile.html 
)| sendmail -t

但输出如下所示

我需要下面这种格式的输出

【问题讨论】:

  • 我运行了您的 awk 脚本并获得了正确的 HTML 表格。
  • 标题和正文之间需要一个空行。此外,您不需要将标题放在 bash 脚本和 awk 脚本中。
  • @Barmar 建议我如何改进它....

标签: awk


【解决方案1】:

awk 脚本正在正确创建表。看起来问题可能出在您将其嵌入电子邮件的方式上。 headers 应该只有一组,并且 headers 和 body 之间需要有一个空行。

您应该在 HTML 属性中转义 ",因为双引号是 awk 字符串分隔符。

awk -F, 'BEGIN { print "<HTML><TABLE border=\"1\"><TH>NAME</TH><TH>CITY</TH><TH>COURSE</TH>" 
}
{
    printf "<TR>"
    for(i=1;i<=NF;i++)
    printf "<TD>%s</TD>", $i
    print "</TR>"
}
END { print "</TABLE></BODY></HTML>" }' /demo/data.csv > /demo/demofolder/demofile.html

(
echo "From: example@abc.com "
echo "To: example@abc.com "
echo "MIME-Version: 1.0"
echo "Subject: Test HTML e-mail." 
echo "Content-Type: text/html"
echo "" 
cat /demo/demofolder/demofile.html 
)| sendmail -t

【讨论】:

  • => 感谢代码兄弟,请编辑 CITY...它的语法不正确.. 总体而言,代码是完美的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2014-11-14
相关资源
最近更新 更多