0
我想在用戶註冊時在PHP中實現簡單的電子郵件驗證。我擁有大部分工作,但在使用郵件功能時遇到問題。調用郵件後永久刷新PHP頁面()
我有一個通過POST發送數據到同一個php頁面(index.php)的窗體。表單正確提交信息,頁面正確接收信息。當我包含對mail()的調用時,電子郵件發送正確並最終放入我的收件箱中,但它會在重新加載之前使頁面掛起(chrome的開發工具表示其掛起)1分鐘。
下面是相關代碼:
if (!empty($_POST['reguser']) && !empty($_POST['regpass'])) {
$username = $userConn->real_escape_string($_POST['reguser']);
$password = password_hash($userConn->real_escape_string($_POST['regpass']), PASSWORD_DEFAULT);
$email = $userConn->real_escape_string($_POST['email']);
$hash = md5(rand(0,1000));
$sql = "SELECT * FROM users WHERE Username = '".$username."'";
$uniqueResult = $userConn->query($sql);
if ($uniqueResult->num_rows == 1) {
echo "Name already taken";
} else {
$registerSQL = "INSERT INTO users (Username, Password, EmailAddress, ActivationHash) VALUES('".$username."', '".$password."', '".$email."', '".$hash."')";
$registerResult = $userConn->query($registerSQL);
if ($registerResult) {
$to = $email;
$subject = 'Website| Verification';
$message = '
You have successfully signed up for Website!<br /><br />
To activate your account please <a href="http://Website.com/verify.php?email='.$email.'&hash='.$hash.'">click here</a> or paste the following link into your browser bar:<br /><br />
http://Website.com/verify.php?email='.$email.'&hash='.$hash.'
<br /><br />
Thanks!
';
$headers = 'From: [email protected]' . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($to, $subject, $message, $headers);
echo "<meta http-equiv='refresh' content='=2;index.php' />";
} else {
echo "Registration failed";
}
}
}
當我使用的開發工具,它告訴我,網頁到底需要一分鐘的時間重新加載,所以我的猜測是其超時檢查頁面。但是,郵件仍然能夠成功地到達所需的地址。
任何想法可能會出錯?
建議查看PHP [Gearman](http://php.net/manual/en/gearmanclient.addtaskbackground.php)或將請求傳遞給Curl以發送電子郵件。或者,查看您使用的電子郵件服務器的配置(如果可以的話)。我猜測有一些反垃圾郵件設置會造成延遲或缺少返回信息(因此超時)。 – Tigger
首先,請避免使用PHP的內置'mail()'函數。能力嚴重受限。只要您在代碼中手動構建郵件標題,您應該考慮使用預先構建的庫,如phpMailer或Swiftmailer。其次,我建議使用第三方郵件提供商實際提供郵件,而不是您的Web服務器;這會將任何處理延遲從您的前端移開。 (注意,'mail()'函數不能做到這一點,但phpMailer/Swiftmailer可以,使用它們的另一個很好的理由)。對於郵件投遞,您可以使用Gmail或其他許多應用程序。 – Simba