您的问题非常模糊,因此很难提供太多帮助。不过,这可能会为您指明正确的方向。
你在这里基本上有三个任务。
- 将您的报告解析为数据结构。
- 使用您的数据结构生成 HTML 文档。
- 通过电子邮件发送 HTML 文档。
我对第 1 步无能为力,因为我对您的报告一无所知。如果您有 CSV 格式的文件,那么 Text:CSV 将对您有用。值得指出的是,如果您正在生成此报告,那么您可以以更易于解析的格式(例如 JSON)生成它。
对于第 2 步,我建议使用模板引擎。我会使用Template Toolkit,但也可以使用其他选项。这个想法是您创建一个模板文件,其中包含所有带有“标签”的 HTML,您希望将变量数据放在其中。在简单的层面上,它可能看起来像这样:
<html>
<head><title>Some Title</title></head>
<body>
<h1>Some Title</h1>
<p>Blah...</p>
<table>
[% FOREACH row IN data -%]
<tr><td>[% row.value %]</td><td>[% row.another_value %]</td></tr>
[% END -%]
<table>
</body>
</html>
假设它位于名为 email.tt 的文件中,并且您的数据位于名为 @data 的哈希数组中,那么您将像这样处理模板:
use Template;
@data = ({
value => 'something',
another_value => 'something else',
}, {
value => 'something',
another_value => 'something else',
});
my $tt = Template->new;
$tt->process('email.tt', { data => \@data }, \$email_body)
or die $tt->error;
这将为您提供 $email_body 中的扩展 HTML。这将我们带到第 3 步。
我推荐Email::Stuffer 发送电子邮件。
use Email::Stuffer;
Email::Stuffer->from ('you@example.com')
->to ('someone_else@example.com')
->html_body($email_body)
->send;