使用perl设置电子邮件标头

时间:2013-11-05 19:40:09

标签: perl email sendmail email-headers

我正在尝试在perl中发送电子邮件时设置一些电子邮件标头。我有以下代码,但Content-Type和X-Priority将在消息正文中发送。以下是我的代码。

my $sendmail = "| /usr/sbin/sendmail -t";

open(MAIL,$sendmail)
        or die("Unable to open sendmail.  $!");
print MAIL "Reply-to: $reply\n";
print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: $subject\n\n";
print MAIL "Content-Type: text/plain\n";
print MAIL "X-Priority: 1\n";
print MAIL "blah\n";
print MAIL "$link\n\n";
close(MAIL);

我正在使用sendmail,因为我想要一些开箱即用的东西,而无需另外安装任何其他东西。

2 个答案:

答案 0 :(得分:2)

从下面的行中删除第二个“\ n”。 Sendmail将第一个空行视为“标题结尾”。

打印邮件“主题:$ subject \ n \ n”;

其他修正:

  • 添加-i命令行选项,以避免对以点
  • 开头的行进行特殊处理
  • 将收件人指定为--命令行选项
  • 之后传递给sendmail的命令行参数
  • 检查close
  • 返回的sendmail退出代码
  • 使用“here document”单页打印

print MAIL <<"END_OF_MESSAGE";
Reply-to: $reply
From: $from
To: $to
Subject: $subject
X-Priority: 1

blah blah blah
$link
END_OF_MESSAGE

答案 1 :(得分:0)

您的实际错误是您将\n\n放在主题之后。结束标题并启动正文。

你真的应该使用几乎所有Perl发行版附带的Net::SMTP。这样,您就不会依赖sendmail的行为。

Net::SMTP模块也非常简单易用。很多人不喜欢它,因为它与原始协议有点太接近了。很多人喜欢像Mail::Sendmail这样的东西,但这不是Perl标准发行版的一部分。