Поэтому я делаю регистрацию / логин / вы знаете, что я говорю о системе, и мне нужно проверить адреса электронной почты пользователя, если они забудут пароль. Для этого я назначаю им случайный PIN-код, который отправляется им по электронной почте. Затем они вводят этот ПИН на странице активации учетной записи, и их учетная запись становится активной.
Теперь моя проблема в том, что электронная почта просто не отправляется. Я использую PHP 5.5 на Hostinger, мои записи MX не настроены, но из вопросов, которые я прочитал об этом, это не то, что вызывает проблему. Вот код:
<?php // connect to database, I'll omit the details because no one cares $pin=rand(1000,9999); $email=$_POST['email']; $rawUser=$_POST['user']; $user=// hash username but I'm not gonna tell you how because safety reasons $rawPassA=$_POST['pass1']; $rawPassB=$_POST['pass2']; if($rawPassA==$rawPassB){ // hash password, again I'm not gonna tell you how } else{ echo "<script type='text/javascript'> window.location.href = 'http://komodokrew.ml/error/login/pass_no_match'; </script>"; }; $first=$_POST['first']; $checkForUserQuery='SELECT count(*) FROM tableNameThatImNotGonnaTellYouBecauseSqlInjection WHERE user = \'' . $user . '\';'; $checkForUser=mysql_query($checkForUserQuery); $checkForUserA=mysql_fetch_row($checkForUser); $checkForUserF=$checkForUserA[0]; if($checkForUserF==0){ $query='INSERT INTO tableNameThatImNotGonnaTellYouBecauseSqlInjection (`user`,`first_name`,`pin`,`password`,`email`,`active`) VALUES (\'' . $user . '\',\'' . $first . '\',' . $pin . ',\'' . $pass . '\',\'' . $email . '\',1);'; mysql_query($query); $subject='KomoDoKrew - account activation'; $message='You have recently registered an account on KomoDoKrew, under the username ' . $rawUser . '. Please activate your account by visiting komodokrew.ml/activate and entering the following PIN code, your username, and your password. PIN code: ' . $pin . '. Thank you for registering an account with KomoDoKrew! Make sure to join the community at komodokrew.ml/forum.'; $from='admin@komodokrew.ml'; $headers='From:' . $from; mail($email,$subject,$message,$headers); echo "<script type='text/javascript'> window.location.href = 'http://komodokrew.ml/success/login/register'; </script>"; } else{ echo "<script type='text/javascript'> window.location.href = 'http://komodokrew.ml/error/login/user_exists'; </script>"; }; mysql_close(); ?>
Кроме того, да, я ЗНАЮ, что я уязвим для SQL-инъекций, я работаю над обучением подготовленных операторов и PDO, и да, я ЗНАЮ, что mysql_ * устарел, я работаю над изучением нового материала PDO, хорошо? Но даже если они меня закачали SQL, он перенаправляет их после их регистрации в любом случае, а пароли и имена пользователей хэшируются с разной солью несколько сотен тысяч раз, поэтому я не слишком волнуюсь в данный момент.
Это типичный журнал, отправленный в php_mail.log:
[23-Nov-2016 22:20:28 UTC] mail() on [/home/u964873932/public_html/register/register.php:40]: To: <myEmailAddressThatImNotGonnaTellYou> -- Headers: From:admin@komodokrew.ml
Это не проблема с тем, что PHP не может получить POST, потому что адрес электронной почты пользователя успешно вводится в базу данных.
Благодаря!
Я бы рекомендовал сначала сделать 2 вещи: 1. Включить журнал ошибок:
error_reporting(-1); ini_set('display_errors', 'On'); set_error_handler("var_dump");
2. И измените строку, в которой вы отправляете электронную почту
$status = mail($email,$subject,$message,$headers); if($status) { echo '<p>Your mail has been sent!</p>'; } else { echo '<p>Something went wrong, Please try again!</p>'; }
Затем посмотрите, есть ли у вас какая-либо ошибка, если нет ошибки. Следуйте этому ответу: почтовая форма PHP не заполняет отправку электронной почты