簡體   English   中英

從 perl 腳本以 html 格式發送郵件

[英]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。

然而。

  1. 請不要在沒有發送等效的純文本附件的情況下發送 HTML 電子郵件。
  2. 請使用模塊讓您的生活更輕松。 Email::* 命名空間中的內容是最好的。
  3. 請扔掉任何告訴你使用&調用 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();

改用Net::SMTP

這是一個已經存在的關於如何以 HTML 格式使用它的鏈接。

Net::SMTP 使用 HTML

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

許多現代 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM