2016-08-25 3 views
0

私は購読モジュールを作成しているので、いくつかのアドバイスが必要です。そして私は非常に多くの電子メールのリストを持っています。たとえば、1052通の電子メールを考えてみましょう。そして、私はこのようなコードを持っています:CodeIgniter 3で適切な方法で多くのユーザーに電子メールを送信するにはどうすればいいですか

$email_list = $this->getClientEmails(); //all email for now returns 1052 valid emails 
$valid_email = array(); 
$invalid_email = array(); 

if(count($email_list) > 0) { 
    for($x = 0; $x < count($email_list); $x++) { 
     if(valid_email($email_list[$x]['email'])) { 
      $valid_email[] = $email_list[$x]['email']; 
     } 
     //get all invalid emails 
     /*else { 
      $invalid_email[] = array(
       'id' => $email_list[$x]['id'], 
       'email' => $email_list[$x]['email'] 
      ); 
     }*/ 
    } 
} 

$email_string = implode(',', $valid_email); 


$this->email->set_mailtype("html"); 

$this->email->from($from, 'Sample Admin'); 
$this->email->to($email_string); //send an email to 1052 users 
$this->email->cc('[email protected]'); 
$this->email->subject($subj); 
$this->email->message($content); 

$send_mail = $this->email->send(); 

if($send_mail) { 
    fp('success'); 
} else { 
    fp('failed'); 
} 

私はこのような電子メールを送信すればいいですか?または、別のユーザーに電子メールを送信するためのループを作成する必要がありますか?私は黙示された文字列を使用しません。私は毎週1回送信します。メールの送信が突然途中で止まったら、どうすればいいですか?もう一度やり直す必要がありますか?または、電子メールが送信されたかどうかを更新する列をテーブルに作成する必要がありますか?

私はこれについていくつかアドバイスをいただけますか?これで全部です、ありがとう。

答えて

1

メーリングリストを持っているので、最初に私がお勧めするのは、スクリプトをバックグラウンドにプッシュすることです。同じ方法でseliniumやcronを使うと、ページレンダリングが止まらないでしょう。

完了したらいずれかの方法でメールを送信したり、複数の人に送信したり、一度に1つずつ送信したりすることはできますが、両方とも有効で問題は発生しません。ここで考慮する必要があるポイントは、維持しているSMTP接続です。

メールを個別に送信する場合は、SMTPサーバーとの接続を切断し、毎回再接続してメールを送信してオーバーヘッドのみが発生することは望ましくありません。

(サーバーを所有している場合、あなたがcpanelのかselinium上にある場合cron job)私はあなたのケースから電子メールを送信するための最も有効な方法は、いくつかのデータベース上のキューは、好ましくは、Redisの作りとタスクがバックグラウンドでそれらを扱う持っていることを言うべき

最後に、これはテストしたい部分です。あなたはメーリングリストを持っているので、あなたのリスト全体を見ないようにしたいので、一度にメールを送信しているときにヘッダーをチェックし、他のユーザーからのメールが表示されない場合は、それ以外の場合は、それぞれ別々に送信してください。

はまた、1つの最終の事、電子メールが配信されていない通常、サーバー上の不良反映している可能性がある跳ね返されるので、常に拒否と同じか、あなたのip addressへのメールの送信を停止しているフラグの電子メールは悪いレポで終わるかもしれないスクリプトを持っており、メールがスパムになる可能性があります。

+0

私の問題についてのあなたの有益な応答をありがとう。私はcronの仕事をしようとします。 (私はまだcronものについて新しいです...)。ところで、私は自分の問題についての記事を見つけました。あなたはこれを見てみることはできますか?http://stackoverflow.com/questions/21447471/how-to-send-emails-in-large-quantities-with-php-script-and-cronjobs – Jerielle

+0

@Jerielleその質問は閉じているので私はそこに答えることができない。とにかく、このソリューションはかなり単純です。私はキューを作ったと言った。今、cronとmysqlを仮定すると、送信する必要があるすべてのメールを含むsqlのテーブルを作成します。 1時間ごとに呼ばれるPHPでcronスクリプトを作成します。テーブルから100を選択し、メールを送信して100行を削除します。これにより、1時間に100通のメールが送信されます。私はそこにブラウザについて何か気づきました、あなたはcronスクリプトを実行するためのオープンブラウザは必要ありません:)背景で実行します。 – georoot

+0

もう一度ありがとう。私はあなたのアプローチをしようとします。 :) – Jerielle

1

CodeIgniterインストールで、PHPMailerをライブラリとして使用したことはありますか?

あなたはこのようにそれを行うことができます:phpmailerの使用方法にthis exampleを参照してください

if(count($email_list) > 0) { 
for($x = 0; $x < count($email_list); $x++) { 
    if(valid_email($email_list[$x]['email'])) { 
     $mail->addAddress($email_list[$x]['email'], $x); 
    } 
} 
} 

してください。

私はこれが助けてくれることを望みます。少なくとも、これはどのようにしてこれを行うことができるかについての異なる視点を与えます。

を参照:

または私は電子メールが送信されているかどうか更新します、私のテーブルの列を作る必要がありますか?

はい、電子メールが送信されたかどうかを制御するには、電子メールがユーザーに送信されたことを確認するために、テーブルの1文字フィールドを「フラグ」として使用する必要があります。

+0

この質問には、考えられるアプローチがたくさんありますが、これは簡単な方法で解決できます。 –

関連する問題