如何在perl中发送HTML /纯文本邮件

时间:2015-04-09 23:50:40

标签: html perl mime

我是perl语言的新手,我想在同一封电子邮件中发送纯文本文件和html文本的内容。我在哪里获取文本文件的文件内容,但我的HTML文本不起作用,我在电子邮件中不是一个大胆的句子。有人可以解释我的html标签如何工作。以下是我的完整代码。 P.S:当我删除行打印MAIL" MIME-Version:1.0"我的html标签工作但文本文件不起作用(不逐行打印)。

use MIME::Lite;
my $HOME        ='/apps/stephen/data';
my $FILE        ="$HOME/LOG.txt";
my @HTML        =();


 push(@HTML,"<b>To send the content of a file in email</b><br>\12");
 push(@HTML,`cat $FILE`);

&sendMail;


sub sendMail
{
$sub="TEST";
$from='ABC@ABC.com';
$to='ABC@ABC.com';
open(MAIL, "|/usr/lib/sendmail -t");
        print MAIL "From: $from \12"; print MAIL "To: $to \12";print    MAIL "Cc: $Cc \12";
        print MAIL "Subject: $sub \12";
        print MAIL "MIME-Version: 1.0" ;
        print MAIL "Content-Type: text/html \12";
        print MAIL "Content-Disposition:inline \12";
        print MAIL @HTML;
    close(MAIL);
}

2 个答案:

答案 0 :(得分:1)

这并不是Perl特有的。 如果您想发送包含相同数据的替代表示的邮件,您必须使用multipart / alternative,即。

Mime-Version: 1.0
Content-type: multipart/alternative; boundary=foobar

--foobar
Content-type: text/plain

Plain text here
--foobar
Content-type: text/html

<p>HTML text here</p>
--foobar--

通过这种方式,邮件程序将获得最佳表示。由于手工构建此类邮件可能很困难,因此最好使用Email:MIMEMIME::LiteMIME::tools等模块。

  

P.S:当我删除行打印MAIL&#34; MIME-Version:1.0&#34;我的html标签工作但文本文件不起作用(不逐行打印)。

难怪你忘记了行尾,即不是

    print MAIL "MIME-Version: 1.0" ;

应该是

    print MAIL "MIME-Version: 1.0\n" ;

除此之外,使用\n代替\12更为明确。

您坚持手动创建MIME消息,请仔细查看相关标准,另请参阅http://en.wikipedia.org/wiki/MIME。值得注意的是,Mail / Mime标题和正文之间必须有一个空行,并且不需要在每个标题行的末尾添加空格。

答案 1 :(得分:1)

您正在准备use MIME::Lite,但是您忘了这一切并尝试手工拼凑MIME结构。即使你确切知道自己在做什么,这也是痛苦和容易出错的;你肯定应该使用一组合适的库函数来保持代码的简单性和可读性,并专注于实际的任务。

MIME::Lite documentation显示了如何执行此操作,正好在简介的第二个示例中。

适应您的存根码

use MIME::Lite;

use strict;   # always
use warnings; # always

### Create a new multipart message:
$msg = MIME::Lite->new(
    From    => 'ABC@ABC.com',
    To      => 'ABC@ABC.com',
    #Cc      => 'some@other.com, some@more.com',
    Subject => 'TEST your blood pressure with some CAPS LOCK torture',
    Type    => 'multipart/mixed'
);

### Add parts (each "attach" has same arguments as "new"):
$msg->attach(
    Type     => 'text/html',
    Data     => join ('\n', '<b>To see the content of a file in email</b><br/>',
             '<strong><blink><a href="cid:LOG.txt">click here</a></blink></strong>')
);
$msg->attach(
    Type     => 'text/plain',
    Path     => '/apps/stephen/data/LOG.txt',
    Filename => 'LOG.txt',
    Disposition => 'attachment'
);
$msg->send();