У меня есть спокойная странная проблема с улавливанием исключений SwiftMailer в Silex. Я хочу отправить электронное письмо следующим образом:
try { $message = \Swift_Message::newInstance() ->setSubject('subject') ->setFrom(array('form')) ->setTo(array('to')) ->setBody('body'); $app['mailer']->send($message); } catch (\Swift_TransportException $e) { $app['logger']->addError('Unable to send welcome email'); }
Я знаю, что он не собирается отправлять какие-либо письма на localhost, и я ожидаю, что это сбой, но почему я не могу поймать исключение Swift_TransportException
в блоке try - catch
?
Он просто печатает:
Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host localhost [Connection refused #61]'
Письма не отправляются немедленно, когда вы вызываете send()
, вместо этого они попадают в буфер памяти, который очищается во время выключения приложения, когда ответ уже отправлен. Это улучшает работу пользователя, так как ответ можно отправлять гораздо быстрее.
У меня также возникла проблема с отправкой писем на моем локальном хосте – я избавился от исключения с этим кодом:
/// config $app['swiftmailer.options'] = array( 'host' => 'smtp.1und1.de', 'port' => '465', 'username' => 'xxx', 'password' => 'yyy', 'encryption' => 'ssl', 'auth' => 'login', ); // bootstrap $app->register(new Silex\Provider\SwiftmailerServiceProvider(), array( 'swiftmailer.options' => $app['swiftmailer.options'] ));