如何使用Perl使用Sendmail向多个收件人发送相同的电子邮件?

时间:2016-11-19 00:22:41

标签: perl email sendmail

我有以下PERL脚本,但我似乎无法一次发送到多个电子邮件。如何发送多封电子邮件,最好是另外发送电子邮件?



open(SENDMAIL, "|/usr/lib/sendmail -oi -t") || die "Cannot open sendmail output";

print SENDMAIL  <<"ENDENDEND";
From: <test\@test.com>
To: <test1\@test1.com>
Subject: report spam
MIME-Version: 1.0
Content-Type: multipart/mixed;
  boundary="DeathToSpamDeathToSpamDeathToSpam"

This is a multi-part message in MIME format.
--DeathToSpamDeathToSpamDeathToSpam
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit


--DeathToSpamDeathToSpamDeathToSpam
Content-Type: message/rfc822
Content-Disposition: attachment

ENDENDEND

while (<STDIN>) {
        print SENDMAIL ;
}


print SENDMAIL  <<"ENDENDEND";

--DeathToSpamDeathToSpamDeathToSpam--
ENDENDEND

close (SENDMAIL);
&#13;
&#13;
&#13;

谢谢!

2 个答案:

答案 0 :(得分:0)

通过执行sendmail程序发送邮件一次只能发送一封邮件,因为这就是sendmail程序的工作方式:邮件通过管道传输到sendmail,邮件在EOF上完成。这意味着您需要再次为下一封邮件调用sendmail。

另一种方法是不执行sendmail以进行传递,而是使用Net::SMTP或类似模块直接与SMTP服务器通信 - 这样您也可以在单个SMTP连接中发送多封邮件。

编辑:如Andrzej A. Filip的评论中所述,使用-bs选项调用sendmail,以便它可以作为最小的SMTP服务器,期望与stdin和stdout进行通信。这个功能似乎也可以在Postfix的sendmail包装器中实现,它可能比original sendmail更有用。
但是,我不知道任何支持这种操作模式的模块,所以你可以自己设置与IPC::Open2的双向通信,然后说SMTP protocol包括所有奇怪的邮件结尾处理和逃避规则。使用Net::SMTP与本地主机上的邮件服务器进行SMTP谈话会更容易,{{3}}已经关注所有协议特定的内容并让您发送邮件。

答案 1 :(得分:0)

添加&#34;抄送:&#34;似乎在这种情况下工作。

出于某种原因,使用密件抄送:或添加另一个To:电子邮件不起作用,但抄送:似乎是这样做的。