【问题标题】:Setting email headers with perl使用 perl 设置电子邮件标题
【发布时间】:2013-11-16 19:48:36
【问题描述】:

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

【问题讨论】:

  • 查看已安装的邮件模块perl -MFile::Find=find -MFile::Spec::Functions -le 'find{ wanted => sub{ print canonpath $_ if /\.pm\z/&&/mail/i }, no_chdir => 1 }, @INC'

标签: perl email sendmail email-headers


【解决方案1】:

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

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

其他修复:

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

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

blah blah blah
$link
END_OF_MESSAGE

【讨论】:

  • 谢谢。又看了一遍就知道了。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 2012-09-17
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多