在我的网络应用程序中,当用户对其帐户进行更改时,我调用php mail()函数向该用户发送电子邮件通知。实施此操作后,我发现帐户更改操作需要很长时间(> 20秒)才能完成。我怀疑这是因为PHP等待mail()函数发送电子邮件。有没有办法在没有等待的情况下拨打电话并立即继续下一行代码?
谢谢,
保
答案 0 :(得分:4)
创建另一个PHP脚本(我们将此示例称为“mailuser.php”)。在此文件中,您的代码将查找尚未通过电子邮件发送的激活帐户...然后发送电子邮件。
在原始代码中(激活帐户后),请致电:
exec("php mailuser.php > /dev/null 2>&1 &");
这应该产生进程,但不要等待它返回。
有关详细信息,请参阅以下帖子:php exec command (or similar) to not wait for result& Run PHP Task Asynchronously
您还可以选择在命令行上传递用户ID,以便mailuser.php不必根据字段/标志查找用户。
答案 1 :(得分:0)
您可以将调用mail函数放在一个名为sendMail.php的单独的php文件中,然后使用(jQuery AJAX)将请求发送到该函数[https://api.jquery.com/jQuery .ajax的/].
$.ajax({
type: "POST",
url: "sendMail.php",
data: { name: "Foo", email: "foobar@baz.com" }
})
.done(function( msg ) {
alert( "Email sent: " + msg );
});
答案 2 :(得分:0)
您可以发送Ajax调用来发送邮件,然后出于安全考虑,如果邮件没有发送,您可以调用数据库查询回滚,这样您的代码就会安全。
答案 3 :(得分:0)
我有同样的问题。编写sendmail.php程序并使用ajax调用它。
<?
session_start();
header("Content-Type: text/html; charset=iso-8859-1");
require_once("libreria/class.phpmailer.php");
$mail = new PHPMailer();
$body="";
$body.="<body>";
$body.=$_POST['cbody'];
$body.="</body>";
$mail->IsSMTP();
$mail->SMTPAuth = true;
//$mail->SMTPDebug = 2;
$mail->Host = "mail.xxx.xxx";
$mail->Port = 25;
$mail->Username = "usermail@xxx.xxx";
$mail->Password = "xxxxxx";
$mail->From = "usermail@xxx.xxx";
$mail->FromName = "xxx";
$mail->Subject = $_POST['subject'];
$mail->WordWrap = 50;
$mail->MsgHTML($body);
$mail->AddAddress($_POST['email'], "User");
$mail->IsHTML(true);
$mail->Send();
?>
(您可以使用ajax调用的响应来管理错误。)