我正在尝试使用cakephp 3.0发送邮件。 我的代码是:
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 :(得分:1)
你不能......至少不可靠。所有CakePHP都可以告诉您发送/排队邮件是否成功,并且取决于您正在使用的传输(Smtp
/ Mail
/ ...),您可以获得从电子邮件服务器。
如果发送/排队失败,则会抛出\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,稍后您可以对其进行评估,但这并非万无一失,因为无法保证通知。
另见
答案 1 :(得分:0)
您需要在电子邮件中添加某种形式的tracking pixel,或者只使用Mandrill(MailChimp)或SendGrid等交易电子邮件服务来为您执行此操作。然后你可以看看他们是否收到了它,以及他们是否打开了它......等等。
答案 2 :(得分:-1)
您可以手动打开发送电子邮件的收件箱,以检查邮件是否已发送。如果由于任何原因无法发送邮件,您将收到一封说明问题的还原邮件。
现在,我知道这不是一种非常有效的方法,所以你需要记住这些事情: - 1.您需要降低电子邮件的安全性。 2.您不应该在电子邮件上发送代码(JavaScript等)。 3.请记住您发送的内容的大小。
检查这些点后,您可以假设您的邮件已发送。为了更安全,您可以每周/每月检查一次邮件,以查看是否已发送所有邮件或是否有任何错误。