我正在做一个项目,我需要从一个网页URL访问CSV文件。我可以访问该文件,并在终端中打印CSV文件的内容,但我无法生成HTML表(然后我将稍后使用MIME发送电子邮件)。
这里是我的代码-我需要完整的CSV文件作为HTML表传递到我的电子邮件。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use POSIX qw(strftime);
use MIME::Lite;
use Getopt::Long;
my $to="pankajdustbin\@gmail.com";
my $from="pankajdustbin\@gmail.com";
$subject="CSV File";
my $content = `curl -s "https:csvfile.com"`;
@output = split(/\n/,$content);
foreach my $line (@output) {
my ($col1, $col2, $col3, $col4, $col5, $col6) = split(/,/, $line);
#print "\n$col1, $col2, $col3, $col4, $col5, $col6\n";
$message = "<tr> <td>$col1</td> <td>$col2</td> <td>$col3</td> <td>$col4</td> <td>$col5</td> <td>$col6</td></tr>";
}
my $msg=MIME::Lite->new(
From => $from,
To => $to,
Subject => $subject,
Data => $message
);
$msg->attr('content-type' => 'text/html');
#MIME::Lite->send("smtp");
$msg->send;
有了这段代码,HTML表格只包含CSV的最后一行。有人能帮我该怎么做吗?
CSV大约有100行,我在终端中看到的示例输出如下:
1.2.3.4 03-04-2022. 03-08-2022. Red. 1%. Positive
5.2.3.4 03-05-2022. 04-08-2022. Blue. 1%. Neutral
and so on...
2条答案
按热度按时间ewm0tg9j1#
问题是每次执行
foreach
循环时,都要覆盖$message
变量的内容,这意味着$message
只会得到最后一个赋值。您可以使用
.=
运算子附加至变数的内容:aemubtdh2#
上一个答案涵盖了您在循环中覆盖了非预期的
$message
。以下代码片段演示了使用split和for循环构建html table 的略微不同的方法。
然后,table 可以按您的意愿使用--通过邮件发送或生成 html 页面。在此演示代码中,生成了完整的 html 页面。
注解1:
\n
和\t
可选,添加仅用于 html 可读性注#2:由于未提供样本输入 CVS 文件,因此根据终端中提供的输出假设内容