我有以下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;
谢谢!
答案 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:电子邮件不起作用,但抄送:似乎是这样做的。