Perl读取每一行并在电子邮件中打印输出(html)

时间:2017-07-19 07:49:31

标签: html perl

以下代码能够读取文件内容并使用文件内容打印正文内容。

use strict;     
my $filename = '.../text.txt';
open (my $ifh, '<', $filename)
or die "Could not open file '$filename' $!";
local $/ = undef;
my @row = (<$ifh>)[0..9];
close ($ifh);
print  "@row\n";

my ($body) = @_;
my ($html_body)= @_;
.
.
.
print(MAIL "Subject: Important Announcement \n");
.
.
.
push(@$html_body, "<h1><b><font color= red ><u>ATTENTION!</u></b></h1></font><br>");
 push(@$html_body, "@row");
.
.
.
 print(MAIL "$body", "@$html_body");
 close(MAIL);

但遗憾的是,我在生成具有相同格式的text.txt文件的电子邮件正文时遇到问题。产生的输出电子邮件只有单行而不是3的段落。

2 个答案:

答案 0 :(得分:-1)

首先,@_是传递给子程序的参数数组,看起来你不在一个。所以,做:

my ($body) = @_;
my ($html_body) = @_;

正在设置$body&amp; $html_body$_[0]undef

如何解决?

如果将它包装在子例程中,有两种方法:

使用shift - &gt;这将使上面的代码看起来像:

my ($body) = shift;
my ($html_body)= shift;

或者,

my ($body, $html_body) = @_;

我会推荐最后一个,因为它代码少,比第一个更易读。

答案 1 :(得分:-1)

您遇到的问题是,当放置在HTML文档中时,纯文本不包含格式信息。行尾字符被忽略并被视为普通的空格。您需要在文本中添加HTML标签以传达您想要的格式,或者您可以将其包装在预标签中,因为它会显示它&#34;原样&#34;。

正如其他人在上述评论中所提到的,您对@_的使用并不合理。将$html_body视为一个数组,当你所做的只是将HTML附加到它时,它真的没有意义。因此,我重写了那段代码,将其用作标量并将HTML附加到其中。并修复了HTML中的一些错误,因为您需要按照打开它们的顺序关闭标记。

print MAIL "Subject: Important Announcement \n";
print MAIL "\n"; # Need a blank line after the header to show it's finished
my $html_body = "<html><body>";
$html_body .=  "<h1><b><font color="red"><u>ATTENTION!</u></font></b></h1>";
$html_body .= "<pre>";
$html_body .= join("", @row);
$html_body .= "</pre>";
$html_body .= "</body></html>";
print MAIL $html_body;
close(MAIL);