Данный вопрос является точным дубликатом:
Написал регистрацию на сайте, запись в БД добавляется, но на почту письмо не приходит, в чем может быть проблема? Файл index.php:
<form style="padding-top:200px">
<input type="text" class="login__input" name="login" id="login" placeholder="Username" required pattern="^[a-zA-Z0-9-_\.]{5,20}$" title="LOGIN can consist of 5 (five) to 20 (twenty) characters from: English characters (lower case), numbers and signs - (dot), (dash), (bottom_incident)" autocomplete="off">
<input type="email" class="login__input" name="email" id="email" placeholder="Email" required>
<input type="button" name="reg" id="registration" value="Register" onclick="CheckForm();">
<input type="password" class="login__input" name="password" id="password" placeholder="Password" required pattern="(?=(.*[0-9]))(?=.*[a-zа-я])(?=(.*[A-ZА-Я]))(?=(.*)).{6,20}" title="The password can consist of 6 (six) to 20 (twenty) characters, you must have at least one digit, one capital letter, one small letter">
<input type="password" class="login__input" name="password2" id="password2" placeholder="Repeat Password" required pattern="(?=(.*[0-9]))(?=.*[a-zа-я])(?=(.*[A-ZА-Я]))(?=(.*)).{6,20}" title="The password can consist of 6 (six) to 20 (twenty) characters, you must have at least one digit, one capital letter, one small letter">
</form>
</div>
<script>
function CheckForm(){
var pass1 = document.forms[0].password.value;
var pass2 = document.forms[0].password2.value;
var login = document.forms[0].login.value;
var email = document.forms[0].email.value;
if (!(document.getElementById('login').checkValidity())){
$('.alert').css('background','red');
Alert_Opoveshenie('Login is incorrect!');
return false
}
if (!(document.getElementById('email').checkValidity())){
$('.alert').css('background','red');
Alert_Opoveshenie('E-mail is incorrect!');
return false
}
if (!(document.getElementById('password').checkValidity())){
$('.alert').css('background','red');
Alert_Opoveshenie('Password №1 is incorrect!');
return false
}
if (!(document.getElementById('password2').checkValidity())){
$('.alert').css('background','red');
Alert_Opoveshenie('Password №2 is incorrect!');
return false
}
if (pass1 != pass2) {
$('.alert').css('background','red');
Alert_Opoveshenie('Password mismatch!');
return false
}
$.ajax({
url: 'Registration.php',
type: 'POST',
data: {login:login, password:pass1, email:email},
success: function(res){
if (res.color=='green'){
document.location.href = "http://www.effmining.com/";
return true
}
else{
$('.alert').css('background',res.color);
Alert_Opoveshenie(res.message);
return false
}
},
error: function(){
$('.alert').css('background','red');
Alert_Opoveshenie('Error!');
return false
}
});
}
function Alert_Opoveshenie(Text){
document.getElementById("alert").innerHTML = Text;
$('.alert').animate({
bottom: '10px',
opacity: '1'
},1000,function(){
// После показа убираем его
var alertHide = setInterval(function(){
$('.alert').animate({
bottom: '-100%',
opacity: '0'
},1000);
clearInterval(alertHide);
},2000); // Время "жизни" алерта 2 секунды.
});
}
</script>
<div class="alert" id="alert">Оповещение</div>
Файл registration.php:
<?php
ini_set('display_errors',1);
error_reporting('E_ALL');
//SETTINGS//
$server_bot = 'smtp.gmail.com';
$password_bot = 'xxxxxxxx';
$mail_bot = 'xxxx';
$name_bot = 'xxxxxx';
$title = 'Confirmation of registration on xxxxxxx';
$mess = 'In order to continue registration, click on the link:';
$mess1 = 'If you did not register on this site, then just ignore this email.';
//SETTINGS//
include_once('db.php');
include_once('inc.class.php');//Различные классы и функции для упрощения работы
$SETTINGS = new SETTINGS();//////////////////////////////START_SETTINGS_CLASS////////////////////
$FORM = new FORM();//////////////////////////////////////START_FORM_CLASS////////////////////////
$AUTH = new AUTH();//////////////////////////////////////START_AUTH_CLASS////////////////////////
// Присваивание переменных из предыдущей формы
$login = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
$mail = htmlspecialchars($_POST['email']);
$tm = time();
$password = password_hash($password, PASSWORD_DEFAULT);
//Закончил присваивать
//Вычисление количества записей в БД с принятыми Логином и Емэйлом
$querylogin=$mysqli->query("SELECT * FROM `users` WHERE login='".$login."'");
$numrowlogin = $querylogin->num_rows;
$queryemail=$mysqli->query("SELECT * FROM `users` WHERE mail='".$mail."'");
$numrowemail = $queryemail->num_rows;
//Закончил вычислять
//Всё для бота отправки сообщ
$mail_class = new EMAIL($email_bot); //Создаём экземпляр класса
$mail_class->setFromName($name_bot); //Устанавливаем имя в обратном адресеc
$mailSMTP = new SMTP_EMAIL($server_bot, $mail_bot, $password_bot, $name_bot, 465); // создаем экземпляр класса
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: ".$name_bot." <".$mail_bot." >\r\n"; // от кого письмо
//Проверки на уникальность и добавление в БД
if ($numrowlogin==0){
if ($numrowemail==0){
if($mysqli->query("INSERT INTO `users` (`login`, `password`, `mail`, `status`) VALUES ('$login', '$password', '$mail', 'false')")){
$valid_sql = $mysqli->query("SELECT `id` FROM `user` WHERE login='".$login."'");
$valid_row = $valid_sql->fetch_assoc();
$id_act = $valid_row["id"];
$messageEmail = $mess." <a href=http://effmining.com/activate.php?login=".$login."&id_act=".$id_act.">link</a> ".$mess1;
if ($resultEmail = mail($mail, $title, $messageEmail, $headers)){
$message = 'You win!';
$color = 'green';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: text/json; charset=utf-8');
echo json_encode($out);
die;
}
}
else {
$message = "Failed to insert data information!";
$color = 'red';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: text/json; charset=utf-8');
echo json_encode($out);
die;
}
}
else {
$message = "That Email already exists! Please try another one!";
$color = 'red';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: text/json; charset=utf-8');
echo json_encode($out);
die;
}
}
else {
$message = "That Login already exists! Please try another one!";
$color = 'red';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: text/json; charset=utf-8');
echo json_encode($out);
die;
}
?>
Класс SMTP_EMAIL:
class SMTP_EMAIL {
/**
*
* @var string $smtp_username - логин
* @var string $smtp_password - пароль
* @var string $smtp_host - хост
* @var string $smtp_from - от кого
* @var integer $smtp_port - порт
* @var string $smtp_charset - кодировка
*
*/
public $smtp_username;
public $smtp_password;
public $smtp_host;
public $smtp_from;
public $smtp_port;
public $smtp_charset;
public function __construct($smtp_host, $smtp_username, $smtp_password, $smtp_from, $smtp_port = 465, $smtp_charset = "utf-8") {
$this->smtp_username = $smtp_username;
$this->smtp_password = $smtp_password;
$this->smtp_host = $smtp_host;
$this->smtp_from = $smtp_from;
$this->smtp_port = $smtp_port;
$this->smtp_charset = $smtp_charset;
}
/**
* Отправка письма
*
* @param string $mailTo - получатель письма
* @param string $subject - тема письма
* @param string $message - тело письма
* @param string $headers - заголовки письма
*
* @return bool|string В случаи отправки вернет true, иначе текст ошибки *
*/
function send($mailTo, $subject, $message, $headers) {
$contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n";
$contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=\r\n";
$contentMail .= $headers . "\r\n";
$contentMail .= $message . "\r\n";
try {
if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
throw new Exception($errorNumber.".".$errorDescription);
}
if (!$this->_parseServer($socket, "220")){
throw new Exception('Connection error');
echo "123";
}
fputs($socket, "EHLO " . $this->smtp_host . "\r\n");
if (!$this->_parseServer($socket, "250")) {
fclose($socket);
throw new Exception('Error of command sending: HELO');
echo "123";
}
fputs($socket, "AUTH LOGIN\r\n");
if (!$this->_parseServer($socket, "334")) {
fclose($socket);
throw new Exception('Autorization error1');
echo "123";
}
fputs($socket, base64_encode($this->smtp_username) . "\r\n");
if (!$this->_parseServer($socket, "334")) {
fclose($socket);
throw new Exception('Autorization error2');
echo "123";
}
fputs($socket, base64_encode($this->smtp_password) . "\r\n");
if (!$this->_parseServer($socket, "235")) {
fclose($socket);
throw new Exception('Autorization error3');
echo "123";
}
fputs($socket, "MAIL FROM: ".$this->smtp_username."\r\n");
if (!$this->_parseServer($socket, "250")) {
fclose($socket);
throw new Exception('Error of command sending: MAIL FROM');
echo "123";
}
fputs($socket, "RCPT TO: " . $mailTo . "\r\n");
if (!$this->_parseServer($socket, "250")) {
fclose($socket);
throw new Exception('Error of command sending: RCPT TO');
echo "123";
}
fputs($socket, "DATA\r\n");
if (!$this->_parseServer($socket, "354")) {
fclose($socket);
throw new Exception('Error of command sending: DATA');
}
fputs($socket, $contentMail."\r\n.\r\n");
if (!$this->_parseServer($socket, "250")) {
fclose($socket);
throw new Exception("E-mail didn't sent");
echo "123";
}
fputs($socket, "QUIT\r\n");
fclose($socket);
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}
private function _parseServer($socket, $response) {
while (@substr($responseServer, 3, 1) != ' ') {
if (!($responseServer = fgets($socket, 256))) {
return false;
}
}
if (!(substr($responseServer, 0, 3) == $response)) {
return false;
}
return true;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сорян за нубовские вопросы, но решения не нашелВникаю в разработку REST API, использую PHP STORM + MAMP Файл index
Как получить все ключи массива $request в Laravel? Подскажите способ без перебора этого массива, без всяких цикловДолжен же быть простой метод из коробки
Можно ли использовать оператор LIKE который в mysql запросах, для чего-то другого например для того что бы просто сравнить переменныеТипо: