У вас есть некоторые данные в формате таблицы, так что вы можете преобразовать их в таблицу HTML, которая будет правильно отображаться любым шрифтом, который используется почтовым клиентом.А для почтовых клиентов, которые не поддерживают HTML, предоставьте текстовую версию, которая будет отображаться шрифтом фиксированной ширины.
Приведенный ниже код анализирует ваш файл CSV, разделенный по конвейеру, и использует его для построения HTML.таблица и текстовая альтернатива.Оба из них затем добавляются к объекту MIME::Entity
, который создаст все заголовки, необходимые для его правильной отправки.
Я использовал Text::CSV
и MIME::Entity
, но существуют другие модули Perlкоторые тоже делают свою работу.
use strict;
use MIME::Entity;
use Text::CSV;
my $file="test_input.txt"; # Change this to where your file is
my $subject="An email";
my $from="someone\@somewhere.com";
my $to="someone\@somewhere.com";
# Create the CSV parser. Confusingly the "allow_whitespace" strips whitespace rather than allowing it to pad out fields
my $csv=Text::CSV->new({sep_char => "|", allow_whitespace => 1});
# Build the MIME::Entity object
my $mime_email=MIME::Entity->build(
From => $from,
To => $to,
Subject => $subject,
Type => "multipart/alternative");
my $html="<table>\n";
my $text;
if(open(my $fh,"<",$file)) # Use the modern way of opening a file
{
while(my $line = <$fh>)
{
$text .= $line;
$csv->parse($line);
$html .= "<tr>";
foreach my $field ($csv->fields())
{
$html .= "<td>".$field."</td>";
}
$html .= "</tr>\n";
}
close($fh);
}
$html .= "</table>\n";
$mime_email->attach(Type => "text/plain",Data => $text);
$mime_email->attach(Type => "text/html",Data => $html);
# Send the email
if(open(my $mail,"|-","/usr/sbin/sendmail -t"))
{
$mime_email->print($mail);
close($mail);
}
Это создаст электронное письмо, которое должно выглядеть так, которое должно красиво отображать таблицу на различных почтовых клиентах в их предпочтительных шрифтах.
Content-Type: multipart/alternative; boundary="----------=_1529920158-30125-0"
Content-Transfer-Encoding: binary
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
From: someone@somewhere.com
To: someone@somewhere.com
Subject: An email
This is a multi-part message in MIME format...
------------=_1529920158-30125-0
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: binary
hello | morning | 30 | 40 |
Yes | evening | 30 | 50 |
------------=_1529920158-30125-0
Content-Type: text/html
Content-Disposition: inline
Content-Transfer-Encoding: binary
<table>
<tr><td>hello</td><td>morning</td><td>30</td><td>40</td><td></td></tr>
<tr><td>Yes</td><td>evening</td><td>30</td><td>50</td><td></td></tr>
</table>
------------=_1529920158-30125-0--