从perl脚本发送带有动态表的邮件
我有以下Perl代码:从perl脚本发送带有动态表的邮件,perl,Perl,我有以下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
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>);
}
}
我想要的是结果数据,即$H和$I,在邮件中以表格的形式表示
H | I
1 | 46
2 | 565756756767
3 | 232132
表的行数是动态的,取决于用户提供的输入。我如何才能做到这一点?如果您希望它成为电子邮件中的一个表,您应该在电子邮件正文中创建一个类似以下内容的表:
$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>';
如果您想在电子邮件中使用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以进入电子邮件正文时,这是一个坏主意
最好将代码与创建输出分开,最好的方法是使用模板引擎,如。通过创建包含所有HTML输出的模板文件,可以更轻松地更改HTML的外观,而不会陷入Perl代码中
另外,在我建议您之前,我建议您避免使用MIME::Lite。但不要相信我的话。报告说:
MIME::Lite当前的维护人员不推荐使用它。有许多备选方案,如Email::MIME或MIME::Entity和Email::Sender,您可能应该改用它们。Lite继续累积奇怪的bug报告,由于有更好的替代品,它没有收到大量重构。请考虑使用别的东西。
我建议切换到与或一起使用。该内容类型看起来不正确。你想在那里干什么?这行不通。我在邮件中获得了适当的间距,但没有表格边框@Andrey@emma:你知道很多HTML吗?A将为您提供具有不可见边框的表格布局。要使边界可见,您需要。
# 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>