2017-07-22 1 views
0

J'essaie d'envoyer du courrier en utilisant cakephp 3.0. Mon code est:CakePHP 3 - Comment vérifier si un email a été livré avec succès?

Email::configTransport('WebMail',[ 
'className' => 'Smtp', 
'host' => $host, 
'port' => $port, 
'timeout' => 30, 
'username' => $username, 
'password' => $password, 
'client' => null, 
'tls' => null] 
); 
$transport = ['transport' => 'WebMail']; 
$email = new Email($transport); 
$email 
->from([$username => $senderName]) 
->to($email_to) 
->subject('Password Reset Code'); 
$response = $email->send('hello'); 

son beau travail, mais le problème est de savoir comment vérifier si le message a été livré avec succès ou non au destinataire. si je débogue $ variable de réponse j'ai reçu le tableau de toutes les données liées au courrier. Maintenant, comment puis-je vérifier si l'email a été livré ou non.

+0

Veuillez toujours mentionner votre version _exact_ CakePHP (_last line_ dans 'vendor/cakephp/cakephp/VERSION.txt') - merci! – ndm

Répondre

1

Vous ne pouvez pas ... au moins pas de manière fiable. Tout ce que CakePHP peut vous dire, c'est si l'envoi/réception du mail a réussi, et en fonction du transport (Smtp/Mail/...) que vous utilisez, vous pouvez obtenir la dernière réponse reçue du serveur de messagerie.

Si l'envoi/le lancement a échoué, une exception \Cake\Network\Exception\SocketException sera levée, donc attrapez-la si vous souhaitez évaluer ce problème. A part ça, il n'y a pas d'autres informations que CakePHP/PHP peut vous fournir.

try { 
    $email->send(); 
} catch (\Cake\Network\Exception\SocketException $exception) { 
    // sending/queing failed 

    // the last response is available when using the Smtp transport 
    $lastResponse = $email->transport()->getLastResponse(); 
} 

Le cas échéant, vous pouvez utiliser une coutume Smtp transport et mettre en œuvre la demande DSNs (Delivery status notifications, que vous pouvez ensuite évaluer plus tard, mais ce n'est pas à toute épreuve non plus, que les notifications ne sont pas garanties.

Voir aussi

0

Vous aurez besoin d'ajouter une certaine forme de tracking pixel à l'e-mail, ou tout simplement utiliser un service de messagerie transactionnelle comme Mandrill (MailChimp) ou SendGrid ... etc qui le fera pour vous. Vous pouvez alors voir s'ils l'ont reçu, et s'ils l'ont ouvert ... etc.

-1

Vous pouvez ouvrir manuellement la boîte de réception de l'envoi de courrier électronique pour vérifier si le courrier a été envoyé. Si, pour une raison quelconque, le courrier n'a pas pu être envoyé, vous recevrez un message de retour indiquant le problème.

Maintenant, je sais que ce n'est pas une méthode très efficace, donc vous devez garder ces choses à l'esprit: - 1. Vous devez réduire la sécurité de vos e-mails. 2. Vous ne devriez pas envoyer de codes (JavaScript, etc.) par courriel. 3. Gardez à l'esprit la taille du contenu que vous envoyez.

Avec ces points cochés, vous pouvez supposer que votre courrier a été envoyé. Pour un côté plus sûr, vous pouvez vérifier votre courrier une fois par semaine/mois pour voir si tous les mails ont été envoyés ou si vous avez eu une erreur.