2017-07-22 11 views
0

cakephp 3.0を使用してメールを送信しようとしています。 私のコードは次のとおりです。CakePHP 3 - 電子メールが正常に配信されたかどうかを確認する方法?

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'); 

その作業罰金が、問題は、電子メールが受信者に、正常か配信されたかどうかを確認する方法です。 $ response変数をデバッグすると、すべてのメール関連データの配列が得られます。 メールが配信されたかどうかを確認する方法を教えてください。

+0

あなたの_exact_ CakePHPのバージョン(_最後の行は 'vendor/cakephp/cakephp/VERSION.txt'にあります)に感謝します - ありがとう! – ndm

答えて

1

少なくとも、信頼性の高いものはありません。すべてのCakePHPは、メールの送信/キューイングが成功したかどうかを確認できます。また、使用しているトランスポート(Smtp/Mail/...)によって、Eメールサーバから最後に受け取った応答を取得できます。

送信/キューイングに失敗した場合は、\Cake\Network\Exception\SocketException例外がスローされるので、この問題を評価したい場合はキャッチしてください。それ以外にCakePHP/PHPが提供できる情報はありません。

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

カスタムSmtpトランスポートを使用して、その後に評価することができDSNs (Delivery status notificationsを、要求して実装することができ該当する場合は通知が保証されていないとして、しかしこれは、どちらか誰にでもありません。

は、あなたが電子メールにtracking pixelのいくつかのフォームを追加する必要がある、またはちょうどマンドリルのようなトランザクションの電子メールサービスを使用します

0

も参照してください。 (MailChimp)またはSendGrid ...これはあなたのためにこれを行います。あなたは彼らがそれを受け取ったかどうか、そして彼らがそれを開いたかどうかを見ることができます。

-1

メールが送信されたかどうかを確認するために、送信メールの受信トレイを手動で開くことができます。なんらかの理由でメールを送信できなかった場合は、問題を述べた返信メールが届きます。

これは非常に効率的な方法ではないので、これらのことを覚えておく必要があります。 - 1.メールのセキュリティを低くする必要があります。 2.電子メールにコード(JavaScriptなど)を送信しないでください。 3.送信するコンテンツのサイズを覚えておいてください。

これらの点を確認して、あなたのメールが送信されたとみなすことができます。より安全な側のために、毎週1回メールをチェックして、すべてのメールが送信されたか、何かエラーがあるかどうかを確認することができます。

関連する問題