我有一个带有表格的网站。当提交表单时,php 会向本地网关发送一封邮件。
php 代码如下所示:
$ok = @mail($emailData['to'], $emailData['subject'], $message, $emailData['headers']);
if ($ok) {
echo "<p>Message has been sent.</p>";
} else {
echo "<p>Message could not be sent!</p>";
}
因此,当邮件成功发送后,mail.log 如下所示:
May 11 06:15:01 webserver postfix/qmgr[2280345]: 7B6B0600EF: from=<www-data@webserver>, size=803, nrcpt=1 (queue active)
May 11 06:15:01 webserver postfix/smtp[2573042]: 7B6B0600EF: to=<[email protected]>, relay=192.168.1.250[192.168.1.250]:26, delay=0.06, delays=0.03/0.01/0.02/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 8478AE11B4)
May 11 06:15:01 webserver postfix/qmgr[2280345]: 7B6B0600EF: removed
但是,由于技术问题,网关无法访问,mail.log 如下所示:
May 8 06:40:12 webserver postfix/qmgr[1521]: 33890607E6: from=<www-data@webserver>, size=67769, nrcpt=2 (queue active)
May 8 06:40:42 webserver postfix/smtp[1493379]: connect to 192.168.1.250[192.168.1.250]:26: Connection timed out
May 8 06:41:12 webserver postfix/smtp[1493379]: 33890607E6: to=<[email protected]>, relay=none, delay=399463, delays=399402/0.04/60/0, dsn=4.4.1, status=deferred (connect to 192.168.1.250[192.168.1.250]:26: Connection timed out)
PHP 只能判断邮件是否已被接受投递,而不能判断邮件是否已成功发送。所以在这两种情况下我都收到“消息已发送”......
所以我尝试找到一种方法,让 postfix 至少将邮件内容(带附件)本地保存在自己的机器(网络服务器)上,以防网关无法访问。因为否则邮件、表格内容将永远消失。
另一方面,当无法从网络服务器访问网关时(在 cronjobs 的帮助下),我已经提供了一种获取信息的方法。但这只会帮助我更快地注意到问题。
有任何想法吗?
谢谢你帮助我。