здравствуйте ниже приведён код регистрации, пару дней назад email доходил без проблем, в БД данные заносятся, но письмо перестало приходить, в чём может быть проблема? Код (PHP): <?php require_once("includes/connection.php"); ?> <?php include("includes/header.php"); ?> <?php error_reporting(E_ALL); ini_set('display_errors', 1); if(isset($_POST["register"])) { if(!empty($_POST['username']) && !empty($_POST['passwords']) && !empty($_POST['confirm_password']) && !empty($_POST['email'])) { $username = trim($mysqli->real_escape_string($_POST['username'])); $passwords = trim($mysqli->real_escape_string($_POST['passwords'])); $confirm_password = trim($mysqli->real_escape_string($_POST['confirm_password'])); $email = trim($mysqli->real_escape_string($_POST['email'])); $query = $mysqli->query("SELECT * FROM users WHERE username='".$username."' OR email='".$email."'"); $numrows = $query->num_rows; if (filter_var($email, FILTER_VALIDATE_EMAIL)){ if (strlen($username) > 3 && strlen($username) < 16) { if (preg_match('`^[a-zA-Z0-9_-]{3,16}$`', $username)) { if (strlen($passwords) >= 5 ) { if($passwords == $confirm_password){$password = password_hash("$passwords", PASSWORD_DEFAULT); if($numrows == 0) {$activation = md5(uniqid(rand(),true)); $active = $activation; $key = substr ($password,8,8); $sql = "INSERT INTO users (`username`, `password`, `email`, `key`, `active`) VALUES ('$username','$password', '$email', '$key', '$active')"; if ($mysqli->query($sql) === TRUE) { $id = $mysqli->insert_id; $to = $email; $subject = "Registration Confirmation"; $body = "Thank you for registering at Mighty Black Box. \n\n To activate your account, please click on this link: \n\n ".DIR."activate.php?x=$ $additionalheaders = "From: <".SITEEMAIL.">rn"; $additionalheaders .= "Reply-To: $".SITEEMAIL.""; mail($to, $subject, $body); $message = " Account Successfully Created.<br/>Please check your email to activate your account"; } else {echo "Error updating record: " . $mysqli->error;} }else {$message = "That username or email already exists! Please try another one!";} }else {$message = "passwords does not mutch";} }else {$message = "password must contain 5 or more characters.";} }else {$message = "username must only contain letters, numbers and underscores.";} }else {$message = "Your username must be between 3 and 16 characters long.";} }else {$message = "email is not correct, Please use only letters (a-z), numbers, and periods. <br/> and it should look like this: example loc$ }else {$message = "All fields are required!";} } $mysqli->close(); ?>
посмотри может функция mail возвращает FALSE https://php.net/manual/ru/function.mail.php#refsect1-functi ... turnvalues Если TRUE, то пиши администратору сервера и спроси почему письма не доходят, он может выяснить. Ещё можно отправлять через SMTP, там самостоятельно можно узнать результат отправки и причину ошибки если таковая произойдёт, так как mail() не гарантирует доставку. PHPMailer удобный класс для отправки почты.
добавил вот это, Код (PHP): if (mail($to, $subject, $body)) {echo "Message successfully sent!";}else { echo "Message delivery failed";} получаю Message delivery failed как узнать почему он перестал отправлять письма?
Твоему компьютеру видимо перестали доверять. У тебя windows? Что за sendmail используется? Сделай проще, через SMTP с PHPMailer от google/yandex/mailru mail
mk-ned ты отправлял письма, кто-то же их принимал, вот он мог перестать тебе доверять (всё из-за спамеров). В php.ini посмотри какой sendmail используется, а по его документации попробуй отправить тестовое письмо, чтобы убедится что проблема не в PHP. У sendmail может быть режим отладки, там будет более подробное сообщение об ошибке.
я письма на свой email-и отправлял. вот всё что нашёл в php.ini, насколько я понял никакой sendmail не используется, или я не там смотрю? [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path ;sendmail_path = ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = On ; The path to a log file that will log all mail() calls. Log entries include ; the full path of the script, line number, To address and headers. ;mail.log = ; Log mail to syslog (Event Log on NT, not valid in Windows 95). ;mail.log = syslog
твоя почта где находится? пиши подробнее, а то получается что играем в угадайку. По умолчанию используется команда sendmail -t -i Вот и посмотри man sendmail и попробуй отправить из терминала письмо