从perl脚本以html格式发送邮件

时间:2013-06-19 06:00:56

标签: perl

我正在使用unix环境并且有一个perl脚本来发送邮件,但是我需要发送HTML格式的邮件,但是因为它是html代码而打印。所以任何人都可以让我知道它如何操纵或编译html并发送格式化的邮件。

#!/usr/bin/perl
#print "Content-type: text/html\n\n";

print("enter my name");
chop($name=<stdin>);
&mail();


sub mail{

$title='perl';
$to='abcd@acv.com';
$from= 'xyz@xyz.com';
$subject=$name;

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

## Mail Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
## Mail Body
print MAIL $name;
print MAIL "<html><body><p>";
print MAIL "<b>Hello</b>";
print MAIL "This is a test message from Cyberciti.biz! You can write your";

print MAIL "</p></body></html>";
##print MAIL "$title";
close(MAIL);
}

用邮件打印:

<html><body><p><b>Hello</b>This is a test message from Cyberciti.biz! You can write your</p></body></html>
像这样......因为它似乎没有把它转换成html格式。 所以请帮助我。

4 个答案:

答案 0 :(得分:2)

您的问题的解决方法是添加一个内容类型标题,说明邮件是text / html。

然而

  1. 请不要发送HTML电子邮件,也不要发送等效的纯文本附件。
  2. 请使用模块让您的生活更轻松。最好使用Email :: *命名空间中的东西。
  3. 请丢弃任何书,告诉您使用&调用Perl子程序。这已经过时了近二十年。

答案 1 :(得分:1)

使用Mime::Lite。这是一个例子:

my $msg = MIME::Lite->new(
     To      => 'you@yourhost.com',
     Subject => 'HTML example',
     Type    => 'text/html',
     Data    => '<h1>Hello world!</h1>'
);

$msg->send();

答案 2 :(得分:0)

使用Net::SMTP代替

这是一个关于如何以HTML格式使用它的链接。

Net::SMTP using HTML

同样的链接还向您展示了如何使用Mime :: Lite。

答案 3 :(得分:0)

许多现代的smtp服务器使用SSL身份验证

因此您可以使用 Net :: SMTP :: SSL

代码看起来像

use Net::SMTP::SSL; 

my $to = 'tomail@server.com';
my $subject = 'Message subject';
my $message = '<h1>Hello</h1>';

my $user = 'USERLOGIN';
my $pass = 'USERPASSWORD';

my $server     = 'smtp.server.com';
my $from_name  = 'NAME';
my $from_email = 'userlogin@server.com';

my $smtps = Net::SMTP::SSL->new($server, Port => 465, DEBUG => 1) or warn "$!\n"; 

defined ($smtps->auth($user, $pass)) or die "Can't authenticate: $!\n";

$smtps->mail($from_email);
$smtps->to($to);
$smtps->data();
$smtps->datasend("To: $to\n");
$smtps->datasend(qq^From: "$from_name" <$from_email>\n^);
$smtps->datasend("Subject: $subject\n\n");
$smtps->datasend($message."\n");
$smtps->dataend();

if ($smtps->quit()) {
    print "Ok";
}