пятница, 6 октября 2017 г.

Соцсеть. Отправка email. Урок 33.

Отправка емейлов.



Скачиваем PHP Mailer по ссылке: https://github.com/PHPMailer/PHPMailer
Помещаем его в корень сайта в папку PHPMailer.

В файл create-account.php подключаем классы.
include('classes/Mail.php');
Mail::sendMail();

Создадим в папке classes Mail.php
<?php
require_once('PHPMailer/PHPMailerAutoload.php');
class Mail {
public static function sendMail() {
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = '465';
$mail->isHTML();
$mail->Username = 'somebody@gmail.com';
$mail->Password = 'yourpassword';
$mail->SetFrom('no-reply@shop-eco.ru');
$mail->Subject = 'Hello world'; // заголовок
$mail->Body = 'A test email!'; // тело письма
$mail->AddAddress('prognoz_distr@mail.ru'); // куда идет email

$mail->Send();
}
}
?>

Испытаем отправку емейла. Зайдем на страницу: http://newsocial.loc/create-account.php


Изменим файл Mail.php

<?php
require_once('PHPMailer/PHPMailerAutoload.php');
class Mail {
public static function sendMail($subject, $body, $address) {
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = '465';
$mail->isHTML();
$mail->Username = 'somebody@gmail.com';
$mail->Password = 'yourpassword;
$mail->SetFrom('no-reply@shop-eco.ru');
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($address);

$mail->Send();
}
}
?>


В create-account.php
Теперь, когда создаешь новый аккаунт, приходит email о его создании
<?php
include('classes/DB.php');
include('classes/Mail.php');



if(isset($_POST['createaccount'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if(!DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {
if(strlen($username) >= 3 && strlen($username) <= 32) {
if(preg_match('/[a-zA-Z0-9_]+/', $username)) {
if(strlen($password) >= 6 && strlen($password) <= 60) {
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
if(!DB::query('SELECT email FROM users WHERE email=:email', array(':email'=>$email))) {
DB::query('INSERT INTO users VALUES (:id, :username, :password, :email, \'0\', \'\')', array(':id'=>null, ':username'=>$username, ':password'=>password_hash($password, PASSWORD_BCRYPT), ':email'=>$email));
Mail::sendMail('Welcome to our Social Network!', 'Your account has been created!', $email);
echo "Success!";
} else {
echo 'Email in use!';
}
} else {
echo 'Invalid email!';
}
} else {
echo 'Invalid password!';
}
} else {
echo 'Invalid username!';
}
} else {
echo 'Invalid username!';
}
} else {
echo 'User already exists!';
}
}
?>

<h1>Register</h1>
<form action="create-account.php" method="post">
<p><input type="text" name="username" placeholder="Username"/></p>
<p><input type="password" name="password" placeholder="Password"/></p>
<p><input type="email" name="email" placeholder="someone@somesite.com"/></p>
<input type="submit" name="createaccount" value="Create Account"/>
</form>

Сделаем сброс пароля. Идем на страницу forgot-password.php
<?php
include('./classes/DB.php');
include('./classes/Mail.php');
if(isset($_POST['resetpassword'])) {
// Генерируем токен.
$cstrong = true;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); // мы генерируем 64 байта, вторым параметром передается только перемена
$email = $_POST['email'];
$user_id = DB::query('SELECT id FROM users WHERE email=:email', array(':email'=>$email))[0]['id'];
//DB::query('INSERT INTO password_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id));
// Вставка в таблицу password_tokens сгенерированного токена и id пользователя
DB::query('INSERT INTO password_tokens VALUE (:id, :token, :user_id)', array(':id'=>null, ':token'=>sha1($token), ':user_id'=>$user_id));
Mail::sendMail('Forgot Password!', "<a href='http://newsocial.loc/change-password.php?token=$token'>http://newsocial.loc/change-password.php?token=$token</a>", $email);
echo 'Email sent!';
echo '<br />';
// echo $token;
}
?>

<h1>Forgot Password</h1>
<form action="forgot-password.php" method="post">
<input type="text" name="email" value="" placeholder="Email..."/>
<input type="submit" name="resetpassword" value="Reset Password"/>

</form>

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html