まぁ、phpならメール関数使うなり、ライブラリいっぱい転がってるんで
そういうの使ったほうがいいです。
当然。
ただ、SMTPの生コマンドで送ってみよう というだけの話です。
前提条件として、認証なしのSMTPサーバがローカルにある という前提。
認証ありの場合、HELOコマンドをEHLOに変えてごにょごにょして下さい。
$toList[] = "abc@user.example.com";
$toList[] = "abc2@user.example.com";
$toList[] = "abc3@user.example.com";
$from = "admin@example.com";
$body = 'TEST MAIL
テストメール';
$body = mb_convert_encoding($body,"JIS");
$sub = mb_convert_encoding("Subject: ソケットでメール","JIS");
$server = "127.0.0.1";
$socket = fsockopen($server,25);
fputs($socket,"HELO $server\r\n");
$ret = fgets($socket,128);
foreach($toList as $key => $val){
fputs($socket,"MAIL FROM:<".$from.">\r\n");
$ret = fgets($socket,128);
fputs($socket,"RCPT TO:<".$val.">\r\n");
$ret = fgets($socket,128);
fputs($socket,"DATA\r\n");
$ret = fgets($socket,128);
fputs($socket,"$sub\r\n");
fputs($socket,"To: <".$val.">\r\n");
fputs($socket,"$body\r\n");
fputs($socket,"\r\n.\r\n");
$ret = fgets($socket,128);
}
$ret = fgets($socket,128);
if(strpos($ret,"250")!==0){
echo "Error\n";
}
fclose($socket);
本当は$ret部分でコマンドの結果を受け取って、失敗したとかの判定を入れるべきですがめんどくさいので
割愛。
あと、どうせソケットで送るなら、一回つないだコネクションを使いまわして連続で送信する ということをやってます。
phpのmail関数系は毎回コネクションを張るので、大量に送るならコネクションは使いまわしたほうが良いです。
まぁ、大体のライブラリにはアリます。
ただ、注意がアリます。
大量に送信していると、途中でコネクションが切れたり ということもあるので、
ちゃんとコネクションがはられているか ということも確認しましょうね
大体2~300回ぐらいで 貼り直したほうがいいと思います。