Как изменить шрифт слова в электронной почте, используя perl - PullRequest
0 голосов
/ 25 июня 2018

Я хочу спросить, как изменить шрифт слова (Calibri на Courier New) в электронной почте, используя скрипт Perl?

Я пытался отправить файл .txt, содержащий формат таблицы, на электронную почту.Но таблица не организована должным образом в содержимом электронной почты, а файл file.txt организован красиво.

Мой результат в электронном письме:

 hello |  morning | 30 | 40 |
 Yes|evening| 30 | 50 |

ожидаемый результат в электронном письме:

 hello      |  morning    | 30 | 40 |
 Yes        |  evening    | 30 | 50 |

enter code here

Ниже мой код:

#! / Usr /bin / perl

my $file = '/nfs/site/disks/fm8_pnr_9/users/eewongon/max_cap/vio_table.txt';

open my $fh, '<', $file or die "Cannot open '$file' for reading: $!";
my $text = do {
local $/;
<$fh>
};
close $fh or die "Ugh: $!\n";

$to = 'someone@somewhere.com';
$from = 'someone@somewhere.com';
$subject = 'Testing';
$message = 'Hi, this is email sent by Perl Script';

open(MAIL, "|/usr/sbin/sendmail -t");

# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";

# Email Body
print MAIL "$message\n";
print MAIL "\n$text\n";

close(MAIL); 
print "Email Sent Successfully\n";

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

У вас есть некоторые данные в формате таблицы, так что вы можете преобразовать их в таблицу 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--
0 голосов
/ 25 июня 2018

Вы должны отправить электронное письмо в формате HTML, чтобы использовать другой шрифт.Однако вместо указания имени шрифта рекомендуется использовать тег pre, чтобы система могла выбрать доступный шрифт фиксированной ширины, поскольку сохранение текстового форматирования таблицы - это все, что вам нужно.

<code># Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/html\n\n";
# Email Body
print MAIL "<html>\n<body>\n<p>$message</p>\n<pre>$text
\ n \ n \ n ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...