我是否可以向PHP邮件发送功能添加紧急状态,以便在用户收到密码时密码重置不会过期?

我是否可以向PHP邮件发送功能添加紧急状态,以便在用户收到密码时密码重置不会过期?,php,token,sendmail,forgot-password,Php,Token,Sendmail,Forgot Password,我目前使用的代币和一些过期代码$expires=date(“U”)+1800;因此,在用户请求链接后大约30分钟。PHP发送功能可以在几秒钟内将电子邮件发送到我的域中的任何地址,但是,任何其他域(如Gmail帐户)可能需要40分钟左右的时间。有没有办法在我的PHP脚本中增加重置链接电子邮件的优先级?还是我必须简单地增加令牌到期时间并稍微降低安全性 谢谢大家! 我尝试更改$from和$header信息,但没有任何积极的结果。我也在overstack上做了大量的谷歌搜索。我主要是在寻找关于如何设置基

我目前使用的代币和一些过期代码$expires=date(“U”)+1800;因此,在用户请求链接后大约30分钟。PHP发送功能可以在几秒钟内将电子邮件发送到我的域中的任何地址,但是,任何其他域(如Gmail帐户)可能需要40分钟左右的时间。有没有办法在我的PHP脚本中增加重置链接电子邮件的优先级?还是我必须简单地增加令牌到期时间并稍微降低安全性

谢谢大家!

我尝试更改$from和$header信息,但没有任何积极的结果。我也在overstack上做了大量的谷歌搜索。我主要是在寻找关于如何设置基本发送功能的信息,我已经知道了

$expires=日期+1800;
需要'config.php';
$userEmail=$_POST[“email”];
$sql=“从pwdReset删除,其中pwdResetEmail=?”;
$stmt=mysqli\u stmt\u init($link);
如果(!mysqli_stmt_prepare($stmt,$sql)){
echo“有一个错误!”;
退出();
}否则{
mysqli_stmt_bind_param($stmt,“s”,$userEmail);
mysqli_stmt_execute($stmt);
}
$sql=“插入pwdReset(pwdResetEmail,pwdResetSelector,pwdResetToken,pwdResetExpires)值(?,,,?)”;
$stmt=mysqli\u stmt\u init($link);
如果(!mysqli_stmt_prepare($stmt,$sql)){
echo“有一个错误!”;
退出();
}否则{
$hashedToken=password\u hash($token,password\u DEFAULT);
mysqli_stmt_bind_param($stmt,“ssss”,$userEmail,$selector,$hashedToken,$expires);
mysqli_stmt_execute($stmt);
}
mysqli_stmt_close($stmt);
mysqli_close($link);
$to=$userEmail;
//主题
$subject='重置您的mydomainhere密码';
//信息
$message='我们收到了您帐户的密码重置请求。如果您没有提出此请求,请忽略此电子邮件。您的密码重置链接是:';
$message.='

'; //标题 $headers=“From:mydomainhere团队\r\n”; $headers.=“回复:info@mydomainhere.org\r\n“; $headers.=“内容类型:text/html\r\n”; //发送电子邮件 邮件($to、$subject、$message、$headers); 标题(“位置:https://www.mydomainhere.org/login/forgotPass.php?reset=success"); }否则{ 标题(“位置:https://www.mydomainhere.org/login/forgotPass.php?reset=error"); 退出(); }
PHP邮件功能正在工作,只是需要比预期更长的时间发送。我希望在邮件中添加一些紧急标记,以便外部服务器更快地接受它

我是否可以向PHP邮件发送功能添加紧急状态,以便在用户收到密码时密码重置不会过期

不,电子邮件没有“加急递送”。“紧迫性”标题存在,但对交付没有影响。(其唯一作用是在某些客户端的消息上显示标志。)


如果你的一些邮件需要“40分钟左右”才能发送到GMail,那说明你的邮件服务器出了问题,需要解决。这不是您的代码的问题。

您无法真正控制交付速度。类似于
紧急
状态的信息对接收者来说只是一个视觉线索。你的服务器和接收服务器之间的路径不看,也不关心这样的事情。糟糕,我担心可能是这样。谢谢您的回复。是的,同意dave的意见,因为服务器不同,响应时间也不同。有些服务器速度很慢,需要更长的时间。您无法控制第三方服务器。但是提高安全性的方法不止一种,你可以通过电子邮件和手机号码发送安全信息来提高安全性。。。您还可以在安全电子邮件部分(两步验证)后询问安全问题答案。旁白:如果您的重置令牌是随机生成的,您不需要对它们进行散列。哈希可以对抗暴力强制,但是暴力强制一个具有足够熵的随机字符串是不可能的。因此,如果您执行类似于
$token=base64_encode(随机_字节(16))。感谢您的反馈。我正在考虑使用PHPMailer()而不是mail()。经过进一步的调查,这与gmail服务器的效果更好。
  $expires = date("U") + 1800;

  require 'config.php';

  $userEmail = $_POST["email"];

  $sql = "DELETE FROM pwdReset WHERE pwdResetEmail=?";
  $stmt = mysqli_stmt_init($link);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "There was an error!";
    exit();
  } else {
    mysqli_stmt_bind_param($stmt, "s", $userEmail);
    mysqli_stmt_execute($stmt);
  }

  $sql = "INSERT INTO pwdReset (pwdResetEmail, pwdResetSelector, pwdResetToken, pwdResetExpires) VALUES (?, ?, ?, ?)";
  $stmt = mysqli_stmt_init($link);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "There was an error!";
    exit();
  } else {

    $hashedToken = password_hash($token, PASSWORD_DEFAULT);
    mysqli_stmt_bind_param($stmt, "ssss", $userEmail, $selector, $hashedToken, $expires);
    mysqli_stmt_execute($stmt);
  }

  mysqli_stmt_close($stmt);
  mysqli_close($link);

  $to = $userEmail;

  // Subject
  $subject = 'Reset your mydomainhere password';

  // Message
  $message = 'We recieved a password reset request for your account. If you did not make this request, please disregard this email. Your password reset link is:';
  $message .= '<a href="' . $url . '">' . $url . '</a></p>';

  // Headers
  $headers = "From: The mydomainhere Team <info@mydomainhere.org>\r\n";
  $headers .= "Reply-To: info@mydomainhere.org\r\n";
  $headers .= "Content-type: text/html\r\n";

  // Send e-mail
  mail($to, $subject, $message, $headers);

  header("Location: https://www.mydomainhere.org/login/forgotPass.php?reset=success");
    } else {
        header("Location: https://www.mydomainhere.org/login/forgotPass.php?reset=error");
        exit();
}