2016-11-19 80 views
0

我有以下PERL腳本,但我似乎無法得到它發送給多個電子郵件一次。我如何發送多封電子郵件,最好是作爲單獨的電子郵件發送?如何使用Perl將同一封電子郵件發送給使用Sendmail的多個收件人?

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);

謝謝!

+1

請勿使用'/ usr/lib/sendmail'發送郵件。存在安全問題,可能會被拒絕爲垃圾郵件。相反,使用類似[電子郵件發件人::(https://metacpan.org/pod/Email::Sender)或[郵件發送::(https://metacpan.org/pod/distribution/MailTools/lib/郵件/ Send.pod)。 – Schwern

+0

我在@schwern在這裏。不要這樣做。避免這種情況。遠離此代碼。這是2016年,並有許多非常好的圖書館,可以幫助您正確撰寫和發送電子郵件。這是在20世紀90年代不會導致安全問題結束的東西,這是你最好避免的危險。 – tadman

+0

嗨 - 感謝您的意見!這是由SpamCop提供的用於通過cPanel將郵件轉發給他們的代碼。我不是一個真正的程序員,所以我不知道如何從頭開始實施其他的東西。 :( – user2694249

回答

0

通過執行sendmail程序發送郵件一次只能執行一個郵件,因爲這就是sendmail程序的工作方式:郵件被傳送到sendmail並且郵件在EOF上完成。這意味着您需要再次爲下一封郵件調用sendmail。

另一種方法是不執行sendmail進行傳遞,而是直接使用Net::SMTP或類似模塊與SMTP服務器交談 - 這樣您也可以在單個SMTP連接中發送多封郵件。

編輯:如在Andrzej A. Filip的評論中指出的一個呼叫與-bs選項的sendmail,以便它作爲一個最小的SMTP服務器,期望與標準輸入和標準輸出進行通信。這個功能似乎在從Postfix的sendmail的包裝物,可能在使用中比original sendmail更還實施。
但是,我不知道任何支持這種操作模式的模塊,因此您可以自己設置可能的IPC::Open2的雙向通信,然後說出SMTP protocol,包括郵件處理和轉義規則的所有奇怪結尾。這將是更容易只是說說而已SMTP郵件服務器上使用Net::SMTP這已經關心的所有協議的具體的東西,讓你只發送郵件本地主機。

+0

可以使用SMTP通過它的stdin和stdout與sendmail(通過sendmail.org)交談。請參閱'sendmail -bs' – AnFi

+0

@ AndrzejA.Filip:謝謝指出這個特性,我已經將它包含在回答# –

+0

嗨!感謝您的建議,我明白了,我不是編碼員,所以我只是使用SpamCop提供的腳本通過cPanel轉發電子郵件給他們,我不知道如何通過SMTP實現這一點。 – user2694249

0

添加「抄送:」似乎在這種情況下工作。

出於某種原因,使用密件抄送:或添加另一個:電子郵件不起作用,但抄送:似乎這樣做。

相關問題