Jak kontrolovat odeslání e-mailu
- Allconius
- Člen | 317
Ahoj,
potřeboval bych poradit jak kontrolovat zda e-mail odešel. Jestli stačí jen dát:
<?php
if ($mailer->send($mail)){
echo "Mail Sent Successfully";
}else{
echo "Mail Not Sent"
}
?>
protože ta funkce send() vrací void: https://api.nette.org/…lMailer.html tzn. že nevrací nic ? Potřeboval bych to udělat stejně jako je toto:
<?php
if(@mail($emailRecipient, $subject, $message, $headers))
{
echo "Mail Sent Successfully";
}else{
echo "Mail Not Sent";
}
?>
Jde mi o to, že sice před odesláním testuji strukturu e-mailu, ale třeba dfgdffg@vv.xx projde a při odeslání to vyhodí exception …
- Allconius
- Člen | 317
Pavel Kravčík napsal(a):
Tak odchytávej tu exception ne? :)
takto? :
<?php
$odeslano=true;
try{
$mailer->send($mail);
} catch (SendException $e) {
$odeslano=false;
}
if ($odeslano){
echo "odeslano";
}else{
echo "nepodarilo se odeslat";
}
?>
nevyhodí to dřív 500 než se dostanu k tomu
<?php
if ($odeslano){
echo "odeslano";
}else{
echo "nepodarilo se odeslat";
}
?>
?
- h4kuna
- Backer | 740
Víceméně
<?php
try {
$mailer->send($mail);
echo "odeslano";
} catch (SendException $e) {
Tracy\Debugger::log($e, 'exception');
echo "nepodarilo se odeslat";
}
?>
Nevyhodí to 500, protože ty tu exception odchytíš a ona už dál nepokračuje.
Editoval h4kuna (23. 1. 2020 11:11)
- David Matějka
- Moderator | 6445
a nezapomen tu chybu zalogovat, napriklad pomoci
Tracy\Debugger::log($e, 'exception');
- Allconius
- Člen | 317
h4kuna napsal(a):
Víceméně
<?php try { $mailer->send($mail); echo "odeslano"; } catch (SendException $e) { Tracy\Debugger::log($e, 'exception'); echo "nepodarilo se odeslat"; } ?>
Nevyhodí to 500, protože ty tu exception odchytíš a ona už dál nepokračuje.
Ahoj dal jsem tam:
<?php
try {
$mailer->send($mail);
$this->redirect('Zadost:ok');
exit;
} catch (SendException $e) {
Tracy\Debugger::log($e, 'exception');
echo "nepodarilo se odeslat";
}
?>
ale stejně to vyhodí na stránce 500 a ne „nepodarilo se odeslat“, spíš mě napadlo přidat kontrolní funkci na doménu už do toho formuláře tj.:
<?php
$form->addText('email', 'e-mail:')
->addRule(Form::EMAIL, 'E-mail nemá správný formát')
->addRule([$this, 'validateDomainEmail'], 'Tento e-mail není platný.')
->setRequired('Zadejte e-mail kontaktní osoby.');
/** @return bool */
public function validateDomainEmail($emailControl)
{
$value = $emailControl->getValue();
return !$this->db2Manager->emailExists($value);
}
//db2Manager
public function emailExists($email)
{
list($user, $domain) = explode('@', $email);
if (checkdnsrr($domain) === FALSE) {
return false;
}else{
return true;
}
}
?>
- David Matějka
- Moderator | 6445
ale stejně to vyhodí na stránce 500 a ne „nepodarilo se odeslat
a pracujes spravne s namespace SendException? mas to v use
?
- Allconius
- Člen | 317
David Matějka napsal(a):
ale stejně to vyhodí na stránce 500 a ne „nepodarilo se odeslat
a pracujes spravne s namespace SendException? mas to v
use
?
Ahoj, aha to musí být v use ? Mám tam jen:
<?php
use Nette;
use App\Model\DbManager;
use Nette\Application\UI\Form;
use Nette\Utils\DateTime;
use Nette\Utils\Html;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
use Tracy\Debugger;
?>
takže přidat:
<?php
use SendException;
?>
nebo
<?php
use Nette\SendException;
?>
?
- David Matějka
- Moderator | 6445
ty nemas nejake ide, ktere by ti reklo, ze ta trida neexistuje a ktere by
napovidalo, jak se ta trida jmenuje? fqn
je Nette\Mail\SendException