如何使用Perl发送HTML电子邮件?

时间:2010-04-12 16:32:36

标签: html perl email

我正在尝试使用Perl发送HTML电子邮件。

 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 "Content-Type: text/html; charset=ISO-8859-1\n\n"
        . "<html><head></head><body>@emailBody";
 close(MAIL)

这是正确的做法吗?它由于某种原因不起作用。谢谢你的帮助。

7 个答案:

答案 0 :(得分:19)

Email::Sender::SimpleEmail::Sender开始 有一个quickstart guide in CPAN,里卡多在他2009年的出现日历中写了一篇很好的use-me

从快速入门指南:

  use strict;
  use Email::Sender::Simple qw(sendmail);
  use Email::Simple;
  use Email::Simple::Creator;

  my $email = Email::Simple->create(
    header => [
      To             => '"Xavier Q. Ample" <x.ample@example.com>',
      From           => '"Bob Fishman" <orz@example.mil>',
      Subject        => "don't forget to *enjoy the sauce*",
      'Content-Type' => 'text/html', 
    ],
    body => "<p>This message is short, but at least it's cheap.</p>",
  );
  sendmail($email);

答案 1 :(得分:10)

内容类型应该是邮件标题的一部分。现在它是邮件正文的一部分。标题通过双换行符与正文分隔。因此,在主题标题之后删除第二个换行符应该可以解决内容类型无法正确解释的问题。

答案 2 :(得分:3)

你不应该直接通过管道与sendmail交谈。而是使用适当的CPAN模块。

Email::Sender就是一个例子。

Mail::Sender has a specific guide on sending HTML messages

答案 3 :(得分:2)

如果您只是生成费用过猛的电子邮件而且您不需要大量的健壮性或调整,那么您可以随时采用快捷方式......

use Email::Stuff;

my $html = <<'END_HTML';
<html>
  ...
</html>
END_HTML

Email::Stuff->to('"Xavier Q. Ample" <x.ample@example.com>')
            ->from('"Bob Fishman" <orz@example.mil>')
            ->subject("Don't forget to *enjoy the sauce*")
            ->html_body($body)
            ->send;

答案 4 :(得分:1)

使用sendmail从Perl发送MIME多部分邮件时出现问题。

经过几个小时的挫折,我发现了整个消息 需要在单个语句的变量中发送消息 发送邮件。例如,如果您的消息完全包含在内 一个名为$ email_msg的变量,通过sendmail发送消息会看起来 像:

$mailprog = '/usr/sbin/sendmail';
open(MAIL,"|$mailprog -t");
print MAIL $email_msg;
close MAIL;

这有效,而使用许多“打印MAIL”消息内容“”没有 似乎发送了一些邮件消息,一些邮件阅读器可以按预期处理。

这是在CentOS服务器上使用Perl 5.8.8。

答案 5 :(得分:1)

您可以使用Email::MIME

    my $message = Email::MIME->create(
    header_str => [
      From    => 'no-reply@example.com',
      To      => $address,
      Subject => encode_mimewords($subject,
        Charset => 'utf-8', Encoding => 'B'),
      'Content-Type' => 'text/html',
    ],
    attributes => {
      encoding => 'base64',
      charset  => 'UTF-8',
    },
    body_str => $message_body,
  );
  sendmail($message);

答案 6 :(得分:0)

使用html标签“pre”将是发送脚本的简单方法
输入HTML电子邮件。

    open(MAIL, "|/usr/sbin/sendmail -t");
    print MAIL "To: $EMAIL\n";
    print MAIL "From: $FROM\n";
    print MAIL "Subject: $SUBJECT";
    print MAIL "Content-Type: text/html; charset=ISO-8859-1\n\n";
    print MAIL < pre >\n$mailoutput< /pre >\n;
    close(MAIL);

这将允许您在脚本中执行所有格式化并将执行 在电子邮件中获得与屏幕上相同的输出。 [如你所知确保
“pre”之前和之后没有空格