我对 PHPMailer 不熟悉,但您当然需要该库的支持才能查询正在发送的电子邮件的状态。
鉴于 PHP 没有线程,我建议有一个用于交付的数据库队列,并从主站点(或通过 cron)触发一个外部 PHP 进程,该进程在侧面处理交付,在数据库上标记当前状态每次交付:NOT_PROCESSED、IN_PROGRESS、CONNECTING、CONNECTED、SENDING_DATA、ACCEPTED、FAILURE_X。您可以通过 Ajax 在数据库中查询每次交付的状态。
如果 PHPMailer 在内部使用标准的 PHP mail() 函数,它在您的机器中使用中继 SMTP 服务器,则您无法获得关于状态的那么多信息(如果您自己创建套接字,您将拥有),您只能拥有三个主要状态NOT_PROCESSED、IN_PROGRESS、FAILURE_X。
(FAILURE_X 确实代表了许多状态,因为它解释了失败的原因)。
使用 mail() 的最后一个考虑是,您将能够知道的状态只是来自本地 SMTP 中继的状态,它总是会很快接受,您将无法判断邮件是否真的传递到传出服务器(至少不必与它交互或读取mailq,这是令人讨厌的事情)。
免责声明
鉴于即使在您真正知道状态的好情况下,您也不知道另一端是否已收到电子邮件,也不知道需要多少时间,我不确定这样的结构会有多大用处。编程肯定会很有趣,但我怀疑它是否真的有用,也许只是一些带有标准电子邮件免责声明的眼睛糖果(电子邮件可能会在传输过程中丢失,如果它失败重试,请在重试之前离开)就足够了.