[英]Send mail in html format from perl script
我在 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 格式。 所以請幫我解決這個問題。
解決您的問題的方法是添加一個內容類型標頭,說明郵件是 text/html。
然而。
&
調用 Perl 子程序的書。 它已經過時了將近二十年。使用Mime::Lite 。 這是一個例子:
my $msg = MIME::Lite->new(
To => 'you@yourhost.com',
Subject => 'HTML example',
Type => 'text/html',
Data => '<h1>Hello world!</h1>'
);
$msg->send();
許多現代 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";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.