За последние 24 часа нас посетили 59015 программистов и 5581 робот. Сейчас ищут 2453 программиста ...

не отсылается, не доходит email

Тема в разделе "PHP для новичков", создана пользователем mk-ned, 30 май 2015.

  1. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    здравствуйте
    ниже приведён код регистрации, пару дней назад email доходил без проблем, в БД данные заносятся, но письмо перестало приходить, в чём может быть проблема?
    Код (PHP):
    1. <?php require_once("includes/connection.php"); ?>
    2. <?php include("includes/header.php"); ?>
    3.  
    4.  
    5. <?php
    6.  
    7. ini_set('display_errors', 1);
    8.  
    9. if(isset($_POST["register"]))
    10. {
    11.  
    12.  
    13. if(!empty($_POST['username']) && !empty($_POST['passwords']) && !empty($_POST['confirm_password']) && !empty($_POST['email']))
    14.   {
    15.         $username = trim($mysqli->real_escape_string($_POST['username']));
    16.         $passwords = trim($mysqli->real_escape_string($_POST['passwords']));
    17.         $confirm_password = trim($mysqli->real_escape_string($_POST['confirm_password']));
    18.         $email = trim($mysqli->real_escape_string($_POST['email']));
    19.  
    20.         $query = $mysqli->query("SELECT * FROM users WHERE username='".$username."' OR email='".$email."'");
    21.  
    22.         $numrows = $query->num_rows;
    23.  
    24. if (filter_var($email, FILTER_VALIDATE_EMAIL)){
    25.  
    26.   if (strlen($username) > 3 && strlen($username) < 16) {
    27.  
    28.     if (preg_match('`^[a-zA-Z0-9_-]{3,16}$`', $username)) {
    29.  
    30.       if (strlen($passwords) >= 5 ) {
    31.  
    32.         if($passwords == $confirm_password){$password = password_hash("$passwords", PASSWORD_DEFAULT);
    33.  
    34.          if($numrows == 0)
    35.  
    36.          {$activation = md5(uniqid(rand(),true));
    37.           $active = $activation;
    38.  
    39.           $key = substr ($password,8,8);
    40.  
    41. $sql = "INSERT INTO users (`username`, `password`, `email`, `key`, `active`) VALUES ('$username','$password', '$email', '$key', '$active')";
    42.  
    43. if ($mysqli->query($sql) === TRUE)
    44. {
    45. $id = $mysqli->insert_id;
    46. $to = $email;
    47. $subject = "Registration Confirmation";
    48. $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=$
    49. $additionalheaders = "From: <".SITEEMAIL.">rn";
    50. $additionalheaders .= "Reply-To: $".SITEEMAIL."";
    51. mail($to$subject$body);
    52.  
    53.     $message = " Account Successfully Created.<br/>Please check your email to activate your account";
    54.  
    55. } else {echo "Error updating record: " . $mysqli->error;}
    56.  
    57.         }else {$message = "That username or email already exists! Please try another one!";}
    58.  
    59.        }else {$message = "passwords does not mutch";}
    60.  
    61.       }else {$message = "password must contain 5 or more characters.";}
    62.  
    63.     }else {$message = "username must only contain letters, numbers and underscores.";}
    64.  
    65.   }else {$message = "Your username must be between 3 and 16 characters long.";}
    66.  
    67. }else {$message = "email is not correct, Please use only letters (a-z), numbers, and periods. <br/> and it should look like this: example loc$
    68.  
    69. }else {$message = "All fields are required!";}
    70.  
    71. }
    72.  
    73. $mysqli->close();
    74.  
    75. ?>
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    посмотри может функция mail возвращает FALSE https://php.net/manual/ru/function.mail.php#refsect1-functi ... turnvalues
    Если TRUE, то пиши администратору сервера и спроси почему письма не доходят, он может выяснить.

    Ещё можно отправлять через SMTP, там самостоятельно можно узнать результат отправки и причину ошибки если таковая произойдёт, так как mail() не гарантирует доставку.

    PHPMailer удобный класс для отправки почты.
     
  3. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    добавил вот это,
    Код (PHP):
    1. if (mail($to, $subject, $body)) {echo "Message successfully sent!";}else { echo "Message delivery failed";} 
    получаю Message delivery failed
    как узнать почему он перестал отправлять письма?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Спросить у администратора сервера или отсылать по SMTP.
    На хостинге проблемы?
     
  5. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    да я на домашнем сервере работаю
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Твоему компьютеру видимо перестали доверять.
    У тебя windows? Что за sendmail используется?

    Сделай проще, через SMTP с PHPMailer от google/yandex/mailru mail
     
  7. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    Ubuntu 14.04,
    кто перестал доверят?
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    mk-ned ты отправлял письма, кто-то же их принимал, вот он мог перестать тебе доверять (всё из-за спамеров).
    В php.ini посмотри какой sendmail используется, а по его документации попробуй отправить тестовое письмо, чтобы убедится что проблема не в PHP.
    У sendmail может быть режим отладки, там будет более подробное сообщение об ошибке.
     
  9. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    я письма на свой 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
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    твоя почта где находится? пиши подробнее, а то получается что играем в угадайку.

    По умолчанию используется команда sendmail -t -i
    Вот и посмотри man sendmail и попробуй отправить из терминала письмо
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    посмотри в файле error.log покажи последние записи