【发布时间】:2013-11-27 14:37:56
【问题描述】:
我需要稍后运行 mail.php 文件,而不是让用户在提交 register.php 时等待发送验证电子邮件。
所以我选择在 1 分钟后在命令行中使用 at 命令运行 mail.php(invoked in register.php):
但我只能在 at 命令的交互模式下向该 php 文件发送参数。
at now + 1 minute
at> php mail.php {email} # {email} is the argument I want to pass
因为我希望这是自动的,所以我需要使用 at 运行一个 shell 脚本:
at -f mail.sh
但我找不到传递 {email} 参数的正确方法,
我尝试在 Shell 中设置环境变量,但也是徒劳的:
在 register.php 文件中,我写道:
shell_exec('export email=foo@bar.com');
shell_exec('at -f mail.sh now + 1 minute');
在 mail.sh 中,我写道:
#! /bin/bash
php mail.php $email
【问题讨论】:
-
为什么 mail.php 阻塞到你担心让用户在执行时等待的程度?
-
可能是由于我尚未调查的服务器上的某些路由问题或某些网络带宽。顺便说一句,我在mail.php中使用了PHPMailer。
-
IIRC PHPMailer 将邮件提交到 SMTP 服务器以进行排队和分派。所以它根本不应该阻塞。实现异步电子邮件发送比从 Web 应用程序开始使用系统 shell 要好得多,因为允许 shell 访问总是存在安全问题。
-
知道如何实现异步电子邮件吗? @deed02392
-
我只是说我认为这就是 phpmailer 的工作方式。我向我的本地 SMTP 服务器提交了一封电子邮件,该邮件需要 ms。您是否尝试直接连接到目标邮件服务器并以这种方式发送邮件,即在 PHP 中实现 SMTP 客户端?