我在Perl中有以下代码:
foreach my $result ( @results ) {
if ( $result->{Error} ) {
print"No response received \n";}
else {
my $H = "$result->{H}";
my $I = "$result->{I}";
$mailbody.=qq(<h4 style="background: blue; color: white;">$H--->$I</h4>);
}
}
在这里,我使用Mime :: Lite发送邮件:
$msg = MIME::Lite->new(
From => $from,
To => $to,
Cc => $cc,
Subject => $subject,
Data => $mailbody
);
$msg->attr("content-type" => "text/html/css");
$msg->send;
我想要的是结果数据,即$ H和$ I以邮件中的表格形式表示。
H | I
1 | 46
2 | 565756756767
3 | 232132
表的行数是动态的,取决于用户给出的输入。我怎么能这样做?
答案 0 :(得分:1)
如果您希望它成为电子邮件中的表格,您应该在电子邮件正文中创建一个表格,如下所示:
$mailbody . = '<table>';
foreach my $result ( @results ) {
if ( $result->{Error} ) {
print"No response received \n";}
else {
my $H = "$result->{H}";
my $I = "$result->{I}";
$mailbody.=qq(<tr><td>$H</td><td>$I</td></tr>);
}
}
$mailbody . = '</table>';
答案 1 :(得分:0)
如果您想在电子邮件中使用HTML表格,请将HTML表格元素添加到输出中。
# Note: border=1 attribute to make the table borders visible.
$mailbody .= '<table border="1">';
foreach my $result ( @results ) {
if ( $result->{Error} ) {
print"No response received \n";}
else {
$mailbody .= qq(<tr><td>$result->{H}</td>)
. qq(<td>$result->{I}</td></tr>);
}
}
$mailbody .= </table>
在对另一个提出相似内容的答案的评论中,您说这不起作用,因为您无法看到表格边框。当然,这是添加border=1
的简单案例,以便显示边框。
然而
总是值得重复的是,将原始HTML字符串放入程序代码中是一个糟糕的主意。这是一个难以维护的混乱的秘诀。在创建Web应用程序时这是一个坏主意,在创建HTML以进入电子邮件正文时这是一个坏主意。
最好将代码与创建输出分开,最好的方法是使用像Template Toolkit这样的模板引擎。通过创建包含所有HTML输出的模板文件,您可以更轻松地更改HTML的外观,而不会陷入Perl代码中。
另外(我之前已经向您建议)我建议您避免使用MIME :: Lite。但是不要相信我的话。 current documentation for the module说明了这一点:
当前的维护者不推荐使用MIME :: Lite。有许多替代方案,例如Email :: MIME或MIME :: Entity和Email :: Sender,您可能应该使用它们。 MIME :: Lite继续产生奇怪的错误报告,并且由于有更好的替代方案,它没有收到大量的重构。请考虑使用其他东西。
我建议切换为Email::Sender(以及Email::MIME)或Email::Stuffer。