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

Can I add an urgent status to PHP mail send function so the password reset is not expired when the user receives it?

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

谢谢!

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

...

  $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();
}

PHP 邮件功能正常,只是发送时间比预期的要长。我希望在邮件中添加某种紧急标记,以便外部服务器可以更快地接受它。

Can I add an urgent status to PHP mail send function so the password reset is not expired when the user receives it?

不,没有 "expedited delivery" 电子邮件。 "Urgency" header存在,但对投递没有影响。 (它的唯一作用是在某些客户端的消息上显示一个标志。)

如果您的某些邮件需要 "up to 40 mins or so" 才能递送到 GMail,则说明您的邮件服务器出了问题,需要解决这个问题。这不是您的代码的问题。