1

我试图在 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,因为我想要一些开箱即用的东西,而不必费心安装任何额外的东西。

4

2 回答 2

2

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

打印 MAIL "主题:$subject\n\n";

其他修复:

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

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

blah blah blah
$link
END_OF_MESSAGE
于 2013-11-05T19:50:01.733 回答
0

您的实际错误是您放在\n\n主题之后。这结束了标题并开始了正文。

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

Net::SMTP模块使用起来也相当简单。很多人不喜欢它,因为它有点太接近原始协议了。很多人更喜欢Mail::Sendmail之类的东西,但这不是 Perl 标准发行版的一部分。

于 2013-11-05T20:11:21.643 回答