使用perl脚本中的动态表发送邮件

时间:2017-11-09 15:12:42

标签: 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: 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

表的行数是动态的,取决于用户给出的输入。我怎么能这样做?

2 个答案:

答案 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