4

我在 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

4 回答 4

2

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

然而。

  1. 请不要在未发送等效纯文本附件的情况下发送 HTML 电子邮件。
  2. 请使用模块让您的生活更轻松。Email::* 命名空间中的东西是最好的。
  3. 请扔掉任何书告诉你使用&. 它已经过时了将近二十年。
于 2013-06-19T11:16:14.173 回答
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();
于 2013-06-19T07:32:21.567 回答
0

Net::SMTP改为使用

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

使用 HTML 的 Net::SMTP

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

于 2013-06-19T07:15:19.957 回答
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";
}
于 2020-01-28T13:15:14.167 回答