2017-09-18 19 views
5

まず、StackOverflowとそのユーザーに感謝して、多くの技術的問題を解決していただきたいと思います。今日私は、このような問題に対処できないので、このアカウントを作成しました。電子メールの送信による遅延PHP CodeIgniter

問題 - PHP CodeIgniterで電子メールを送信する際に問題が発生しました。関数$ this-> email-> send()は、実行するたびに3〜4秒程かかる。

私たちは、ユーザーが来て、物事を投稿するソーシャルプラットフォームを持っています。ユーザーが新しいアップデートをアップロードするたびに、彼/彼女に電子メールを送信します。 問題はsend email機能が約3〜4秒かかり、1秒以下で機能させるのが大好きです。

私たちはメール送信プロセスを並行して実行する方法はありますか?新しい更新プログラムを取得してそれらのユーザーに電子メールを送信するために継続的に実行されるPythonコードを言う。それより良い方法はありますか?

テクノロジースタック - PHP CIは、MySQL、Apacheのは、Windowsの

これは、すべての新しい更新プログラムに呼び出される電子メールのコードである - databseemailを保存し、送信

$config = Array(
     'protocol' => 'smtp', 
     'smtp_host' => 'smtp.gmail.com', 
     'smtp_port' => 587, 
     'smtp_user' => '[email protected]', 
     'smtp_pass' => 'password', 
     'mailtype' => 'html', 
     'charset' => 'utf-8', 
     'smtp_crypto' => "tls" 
     ); 

$this->load->library('email', $config); 
$this->email->set_newline("\r\n"); 
$this->email->set_mailtype("html"); 
$this->email->from('[email protected]', 'Support'); 
$this->email->to($this->session->userdata['email']); 
$this->email->subject('You have posted a new update'); 
$this->email->message('Please login to check your new update. Do not reply to this email. For any issues reach out to [email protected]'); 

if (!$this->email->send()) 
{ 
    show_error($this->email->print_debugger()); 
} 
else 
{ 
    echo true; 
} 
+0

こんにちは、あなたが答えを知っていればわかります。 でも、私はhotmailかgmailのいずれかから電子メールを送信しても、1分以上かかると思うが、それは良い待っている時間かもしれないと思う。 –

+0

電子メールを送信するために非同期関数を使用することをお勧めします。これにより、ロジックをより速く完了し、迅速な対応が可能になります。詳細については、https://stackoverflow.com/questions/13846192/php-threading-call-to-a-php-function-asynchronously –

+0

をご確認いただきありがとうございます。非同期メソッドを試します。 –

答えて

1

その私の提案これらの電子メールはクローンジョブを使用しています。アップロードするユーザは一度にメールを送信するのを待つべきではありません。

あなたはcron仕事とsmtp mailerためのコードが必要な場合は、ちょうどあなたの関数が速く働いているが、送信メールが遅い場合、それはあなたのSMTP接続の問題でなければなりませんANS

+0

答えをありがとう。このアプローチの唯一の問題は、更新があるかどうかを確認するためにデータベースにpingを続ける必要があることです。それは私のデータベースを遅くするかもしれません。また、ユーザーの数が同時に更新されると、デッドロックが発生する可能性があります。 –

+0

送信されず、制限値10を設定し、クローンジョブ時間を30秒に設定した電子メールを取得します。 –

+0

間違っていないと、あなたのデータベースに影響しません –

1

にコメント。あなたのサーバは、SMTPを素早く接続したり、使用するSMTPを応答に少し遅くすることはあまりありません。 その場合は、gmail SMTPを試して、結果を確認してください。

+0

ご回答ありがとうございます。私は自分の設定変数に次のgmail smtpサーバーを使用しています。 'smtp_host' => 'smtp.gmail.com'、 'smtp_port' => 587、 –

+0

あなたのサーバsmtpで試してみて、結果を確認してください。 –

+0

さらに、サーバーでどのくらいのRAMを使用していますか? –

関連する問題