在我的网站应用程序中,当用户更改其帐户时,我调用php mail()函数来发送电子邮件通知。 在实现这一点后,我发现帐户更改操作需要很长时间(> 20秒)才能完成。 我怀疑这是因为PHP在等待mail()函数发送电子邮件。 是否有任何方法可以在不等待的情况下立即进行此调用并继续下一行代码?
谢谢,
保罗
谢谢,
保罗
exec("php mailuser.php > /dev/null 2>&1 &");
你可以将调用邮件函数的代码放在一个名为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 );
});
我曾经遇到过同样的问题。编写一个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调用的响应来处理错误。)
您可以发送Ajax调用以发送邮件,如果邮件未发送,则出于安全考虑,您可以在数据库查询上调用回滚操作,这样您的代码将更加安全。