Perl:格式化输出到电子邮件正文

时间:2012-09-25 17:23:52

标签: perl

我正在使用perl的格式语法生成格式化的文本输出,然后我将整个输出粘贴到标量变量,当我将其作为电子邮件正文发送时,整个文本会丢失其格式,有趣的是当我复制并粘贴收到的将正文通过电子邮件发送到文本编辑器(记事本),它将其粘贴为原始格式化文本。 我尝试了不同的编码,但没有任何帮助发送,因为HTML更糟糕。 任何可以解决这个问题的指针都将非常感激。 对于电子邮件我使用MIME :: Lite和Net :: SMTP。 谢谢 / G

编辑:以下是我用来发送电子邮件的代码:

$msg = MIME::Lite->new(
    From    => 'username@domain.com',
    To      => 'username2@domain.com',
    Cc      => '',
    Subject => 'Helloooooo,!',
    Type    => 'multipart/related',
);

$msg->attach(
    Type => 'text/plain charset=ANSI',
    Data => encode("Windows-1250", $data)
);

$msg->send('smtp', 'smtp.domain', Debug=>0);

2 个答案:

答案 0 :(得分:2)

我成功使用了这个构造:

# Convert the data to HTML.
my $html = $data;
$html =~ s/&/&/g;
$html =~ s/</&lt;/g;
$html =~ s/>/&gt;/g;

# Add header and formatting.
$html = <<"__EOI__";
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Helloooooo,!</title>
</head>
<body>
<pre>$html</pre>
</body>
</html>
__EOI__

# Convert to bytes.
$html = encode("UTF-8", $html);

# Send it.
my $msg = MIME::Lite->new(
        From    => 'username@domain.com',
        To      => 'username2@domain.com',
        Subject => 'Helloooooo,!',
        Type    => 'text/html',
        Data    => $html,
);
$msg->send();

我不像你一样使用$ msg-&gt; attach(),因为在这种情况下不需要它。

答案 1 :(得分:1)

text/plain charset=ANSI

应该是

text/plain; charset=Windows-1250

text/plain; charset=cp1250

(不确定邮件程序识别的是什么,但ANSI不是编码。)

但真正的问题(基于您最新评论中提供的信息)与邮件标题无关。这只是一个字体选择问题。在记事本中,您使用非比例字体(例如Courier New)。这意味着字体中的每个字符在屏幕上都占有相同的空间。

10“l”和10“m”:llllllllllmmmmmmmmmm
10“m”和10“l”:mmmmmmmmmmllllllllll

另一方面,您的电子邮件阅读器使用比例字体(例如Ariel,Times New Roman)。在这种字体中,较窄的字符(例如“l”)使用较少的水平像素而不是较宽的字符(例如“m”)。

10“l”和10“m”:llllllllllmmmmmmmmmm
10“m”和10“l”:mmmmmmmmmmllllllllll

解决方案:更改电子邮件阅读器的字体,或将有效负载更改为可以指定字体(HTML)的格式。