我正在使用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格式。
所以请帮助我。
答案 0 :(得分:2)
您的问题的解决方法是添加一个内容类型标题,说明邮件是text / html。
然而
&
调用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)
答案 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";
}