Zend FrameworkアプリケーションでZend_Mailを使用して、Webベースの連絡フォームの内容を含む電子メールを送信しています。
郵送自体は正常に機能しますが(Google Appsアカウントを使用している場合)、処理にかなり時間がかかる場合があります(数秒から1分近くまで)。
私のコントローラーアクションは通常、メールの送信後に訪問者をリダイレクトするため、$ mail-> send()を呼び出す前に訪問者をリダイレクトして、スクリプトを「バックグラウンド」で続行できる可能性があると考えました。
だから私は次のことを試しました:
$mailView = clone $this->view;
$mailView->assign('name', $form->getValue('name'));
$mailView->assign('email', $form->getValue('email'));
$mailView->assign('message', $form->getValue('message'));
$mailContent = $mailView->render('mailContact.phtml');
$mail = new Zend_Mail();
$mail->addTo('recipient@domain.com');
$mail->setSubject('Web Contact');
$mail->setBodyHtml($mailContent, 'UTF-8');
$this->_flashMessenger->addMessage('Thank you for your message!');
$this->_redirector->setExit(false)->gotoUrl('/about/contact');
$mail->send();
ここ$this->_redirector
で、は*Zend_Controller_Action_Helper_Redirector*のインスタンスです。
これは違いを生まないようです。メールが送信された後、リダイレクトが発生する間、スクリプトはブロックされたままです。
おそらく、コントローラープラグインを作成する必要があります。postDispatch()フックを使用すると、訪問者がリダイレクトされた後にメールを送信できますか?
提案は大歓迎です!