2016-11-19 2 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'を使ってメールを送信しないでください。セキュリティ上の問題があり、スパムとして拒否される可能性があります。代わりに[Email :: Sender](https://metacpan.org/pod/Email::Sender)や[Mail :: Send](https://metacpan.org/pod/distribution/MailTools/lib/)のようなものを使用してください。 Mail/Send.pod)。 – Schwern

+0

ここには@schwernがあります。これをしないでください。これを避けてください。このコードから逃げる。 2016年であり、電子メールメッセージを適切に作成して配信するのに役立つライブラリが多数あります。これは1990年代にセキュリティ上の問題を引き起こさなかった種類のもので、避けるのが最善の危険です。 – tadman

+0

こんにちは - あなたのコメントのおかげで!これはSpamCopがcPanel経由で電子メールを転送するコードです。私はプログラマーではないので、何かをゼロから実装する方法はわかりません。 : – user2694249

答えて

0

sendmailプログラムを実行してメールを送信すると、一度に1つのメールしか送信できないので、sendmailプログラムがどのように動作するのですか?メールはsendmailにパイプされ、メールはEOFで行われます。つまり、次のメールに対してsendmailを再度呼び出す必要があります。

もう一つの方法は、配送のためにsendmailを実行するのではなく、Net::SMTPまたは同様のモジュールを使用してSMTPサーバーに直接話すことです。この方法で、単一のSMTP接続で複数のメールを送信することもできます。

編集:Andrzej A. Filipのコメントに記されているように、-bsオプションを指定してsendmailを呼び出すと、stdinとstdoutとの通信を期待する最小限のSMTPサーバーとして動作します。この機能は、おそらくoriginal sendmailよりも使用頻度の高いPostfixのsendmailラッパーでも実装されているようです。
しかし、私はこの操作モードをサポートしているモジュールを認識していないので、双方向通信を設定してIPC::Open2と設定してから、メール処理とエスケープルールのすべての奇妙な終わりを含むSMTP protocolを話してください。ローカルホスト上のメールサーバーにSMTPを話すだけで、すでにプロトコル固有のものすべてに気をつけているメールをNet::SMTPで扱うことができます。

+0

stdinとstdoutを使ってSMTPを使ってsendmail(sendmail.org)と話すことができます。「sendmail -bs」を参照してください。 – AnFi

+0

@ AndrzejA.Filip:この機能を指摘していただきありがとうございます。 –

+0

こんにちは!あなたのアドバイスをありがとうございます。私はコーダーではないので、私はcPanel経由で電子メールを転送するためにSpamCopによって提供されたスクリプトを使用していました。 – user2694249

0

この例では、「Cc:」を追加しているようです。

何かの理由で、Bcc:を使用するか、別のTo:電子メールを追加することはできませんが、Ccはそれを行うようです。

関連する問題