W przypadku projektu (dotyczącego nieruchomości) umieściłem formularz kontaktowy, w którym użytkownik może skontaktować się z pośrednikiem w obrocie nieruchomościami, jeśli użytkownik jest zainteresowany zakupem/wynajęciem nieruchomości.swiftmailer Swift_TransportWyjątek zostaje zablokowany przez blok próbny catch
Używam Symfony2 i jej biblioteki. W przypadku poczty kontaktowej korzystam z biblioteki Swiftmailer. Mam kolejny kod, który obsługuje formularz przesyłania. tam tworzę obiekt poczty, aby móc wysyłać maile. Działa, ale chcę zapewnić usługę rozwiązywania błędów, jeśli występują problemy z hostem smtp od nadawcy/odbiorcy.
Oto kod,
$data = $contactForm->getData();
try {
// create body text
$body = $app['twig']->render('mailTemplate.twig', array('data' => $data, 'immoid' => $immoID));
// set mail
$mail = \Swift_Message::newInstance()
->setSubject('Contact reaction on your immo offer.')
->setFrom($app['swiftconfig']['sender'])
->setTo($contactinfo['contactmail'])
->setBody($body, 'text/html');
// send mail
$app['mailer']->send($mail);
// redirect if successfull
$app->redirect($app['url_generator']->generate('immoDetail', array('immoID' => $immoID)));
}
catch (Swift_TransportException $STe) {
// logging error
$string = date("Y-m-d H:i:s") . ' - ' . $STe->getMessage() . PHP_EOL;
file_put_contents("errorlog.txt", $string, FILE_APPEND);
// send error note to user
$errorMsg = "the mail service has encountered a problem. Please retry later or contact the site admin.";
}
catch (Exception $e) {
// logging error
$string = date("Y-m-d H:i:s") . ' - GENERAL ERROR - ' . $e->getMessage() . PHP_EOL;
file_put_contents("errorlog.txt", $string, FILE_APPEND);
// redirect to error page
$app->abort(500, "Oops, something went seriously wrong. Please retry later !");
}
($ app [ 'swiftconfig'] [ 'nadawca'] = MailAddress z hosta/$ ContactInfo [ 'contactmail'] = adresu pocztowego ze strony użytkownika (złożone w formularz kontaktowy))
Teraz, gdy host smtp nie działa, Swiftmailer wysyła wyjątek, ale blok catch próbuje go NIE przechwycić. Funkcja jest właśnie kontynuowana. Nawet główny blok try-catch (w app.php) też go nie łapie. W wyniku tego na stronie pojawia się duży błąd PHP, co nie powinno się zdarzyć. Wiadomość od niego jest opisana poniżej:
SCREAM: Error suppression ignored for
---
Fatal error: Uncaught exception 'Swift_TransportException' with message ' in C:\...\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php on line 266
---
Swift_TransportException: Connection could not be established with host <output omitted>
Czy ktoś wie, dlaczego blok catch try nie chwyta niestandardowego wyjątku? Zbadałem pliki klas i postępy, ale nie widzę żadnej niezwykłej aktywności.
Mam nadzieję, że ktoś może znaleźć rozwiązanie, ponieważ błędy PHP nie powinny pojawiać się na stronach witryny.
Czy jesteś pewien, że WYJĄTKIEM w tej części kodu? Nie widzę nic paskudnego. –
Spróbuj 'catch (\ Swift_TransportException $ e)' –
@ Arkadiusz'flies'Rzadkowolski: Tak. Ta funkcja jest jedyną, w której używam biblioteki Swiftmailer. Powyższy blok kodu pojawia się w żądaniu POST: if ('POST' == $ app ['request'] -> getMethod()) {...} – KarelG