2014-09-19 49 views
0

我想发送关于哈希值的html电子邮件(报告)。但我无法以表格格式打印散列值。我正在使用HTML::Mason来执行我的perl命令(循环散列)并将其打印在报告末尾。但我的Perl代码没有得到执行。perl:HTML :: Mason - 以表格格式在HTML标签内打印Perl哈希

use HTML::Entities; 
use Mail::Sendmail; 
use MIME::Lite; 
use Term::ANSIColor; 
use Time::localtime; 
use HTML::Mason; 

my $ti = localtime; 
my ($day, $month, $year) = ($ti->mday, $ti->fullmonth, $ti->year); 

# DEFINE A HASH 
%coins = ("Quarter" => 25, "Dime" => 10, "Nickel" => 5); 

$html = <<END_HTML; 
    Please direct any questions to <a href="mailto:[email protected]">MyEmailID</a><br><br> 

    <table border='1'> 
    <th>Keys</th><th>Values</th> 
% while (($key, $value) = each(%coins)){  
    <TR>  
    <TD><% $key %></TD>  
    <TD><% $value %></TD>  
    </TR>  
% } 
    </table>; 

END_HTML 

$msg = MIME::Lite->new(
    from => '[email protected]', 
    To  => '[email protected]', 
    Subject => 'Report', 
    Type => 'multipart/related' 
); 
$msg->attach(
    Type => 'text/html', 
    Data => qq{ 
     <body> 
     <html>$html</html> 
     </body> 
    }, 
); 

MIME::Lite->send('smtp', 'xxxs.xxxx.xxxxx.com'); 
$msg->send; 

回答

2

由于您只是想产生一个表,你可以很容易地不使用HTML ::梅森这样做:

use HTML::Entities; 
use Mail::Sendmail; 
use MIME::Lite; 
use Term::ANSIColor; 
use Time::localtime; 

my $ti = localtime; 
my ($day, $month, $year) = ($ti->mday, $ti->fullmonth, $ti->year); 

# DEFINE A HASH 
my %coins = ("Quarter" => 25, "Dime" => 10, "Nickel" => 5); 

my $html = '<table border="1"> 
<thead><th>Keys</th><th>Values</th></thead> 
<tbody>'; 

while (my($key, $value) = each(%coins)) { 
    $html .= "<tr><td>$key</td><td>$value</td></tr>"; 
} 
$html .= "</tbody></table>"; 

my $greeting = 'Please direct any questions to <a href="mailto:[email protected]">MyEmailID</a><br><br>'; 
my $outtro = '<br><br>See yas later, alligator!'; 

$html = $greeting . $html . $outtro; 

$msg = MIME::Lite->new(
    from => '[email protected]', 
    To  => '[email protected]', 
    Subject => 'Report', 
    Type => 'multipart/related' 
); 
$msg->attach(
    Type => 'text/html', 
    Data => qq{ 
     <body> 
     <html>$html</html> 
     </body> 
    }, 
); 

MIME::Lite->send('smtp', 'xxxs.xxxx.xxxxx.com'); 
$msg->send; 

除非你需要在你的电子邮件有很多复杂的,它是可能不值得使用HTML :: Mason来达到这个目的。如果您打算使用HTML :: Mason作为电子邮件,则需要设置脚本来调用它 - see the pod for details。不幸的是,你不能只在一个字符串中嵌入梅森命令。

0

是这样的吗?

# DEFINE A HASH 
my %coins = ("Quarter" => 25, 
       "Dime" => 10, 
       "Nickel" => 5,); 

for my $no (keys %coins) { 
    print qq(
    <table> 
     <tr><td> $no </td></tr> 
     <tr><td> $coins{$no} </td></tr> 
    </table> 
    ); 
} 
+0

我可以这样打印。但是,我怎样才能将结果(表格)附加到现有的HTML文本中,这些文本是通过电子邮件发送的? – Jill448 2014-09-19 16:15:44

+0

我认为你必须重新思考你的过程。你之前没有提到你是通过电子邮件发送的,所以稍微澄清一下就好了,至于你究竟在做什么。如果我已经正确理解了你,一种方法可能是:生成一个HTML页面并暂时保存,并将该文件的副本作为电子邮件的附件发送。 – 2014-09-19 16:24:35

+0

我的问题中的第一行清楚地表明,我正在尝试发送电子邮件。无论如何感谢您的尝试。但我需要它作为电子邮件正文,而不是作为附件。 – Jill448 2014-09-19 16:31:20