Я использую Zend_Mail в приложении Zend Framework для отправки электронного письма с содержимым контактной формы через Интернет.
Сама рассылка работает нормально (я использую учетную запись Google Apps), но обработка может занять довольно много времени (от нескольких секунд до почти минуты).
Мое действие контроллера обычно перенаправляет посетителя после отправки почты, поэтому я подумал, что смогу перенаправить посетителя до вызова $ mail-> send () и позволить сценарию продолжить работу в 'background':
Итак, я попробовал следующее:
$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 () отправлять почту после перенаправления посетителя?
Предложения приветствуются!