2014-09-19 19 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