Jak kontrolovat odeslání e-mailu

Allconius
Člen | 313
+
0
-

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 …

Pavel Kravčík
Člen | 1181
+
+3
-

Tak odchytávej tu exception ne? :)

Allconius
Člen | 313
+
+2
-

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
+
+1
-

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
+
+1
-

a nezapomen tu chybu zalogovat, napriklad pomoci Tracy\Debugger::log($e, 'exception');

Allconius
Člen | 313
+
0
-

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;
		}


    }



?>
Allconius
Člen | 313
+
0
-

Nějak to funguje jen musí být návratová hodnota bez negace, jiak to blokuje funkční domény :-) tj.:

<?php

return $this->db2Manager->emailExists($value);

?>
David Matějka
Moderator | 6445
+
0
-

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 | 313
+
0
-

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
+
0
-

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