从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

我有以下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>);

     } 
}
我想要的是结果数据,即$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>