Проверка на парола и работа с PHPMailer
Не ти трябва паролата в чист вид. Просто взимаш това, което е въвел потребителя и го минаваш през същата функция, с която си записал паролата първия път. После сравняваш (работиш) с двата "хеш"-а.
А, иначе, не видях нещо за PHPMailer.
Ако става въпрос за функционалност за "Забравена парола", ако МНОГО държиш да пращал нова парола, а не линк за възстановяване на паролата, преди да минеш през твоята функция за парола произволната нова такава (и да я запишеш в ДБ?), изпрати имейла.
Всъщност варянта с двата хеша мисля че е нау удачен, аз предпочитам да се праща линк за забравена парола и реално да се генерира нова после евентуално той ако иска да си я смени. Но предложението което ми даде с двата хеша звучи доста добро решение.
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8'; // Set encoding utf-8 mail
$query2 = mysqli_query($sql, "SELECT * FROM smtpsettings WHERE smtpuser='$rr'");
while ($row2 = mysqli_fetch_array($query2)) {
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = $row2['smtpmail']; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $row2['smtpuser']; // SMTP username
$mail->Password = $row2['smtppass']; // SMTP password
$mail->From = $row2['smtpuser'];
$mail->FromName = $row2['titlefrom'];
$mail->AddAddress($row2['sendto']);
$mail->AddCC($row2['sendto2']); // add to CC
//$mail->AddAddress("ellen@example.com"); // name is optional
$mail->WordWrap = 10000; // set word wrap to 50 characters
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = $row2['msgtitle'] . " " . date('d-m-Y h:i:s A', time());
}
$mail->Body = $notes;
//$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if (!$mail->Send()) {
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
$mail->Password = $row2['smtppass']; тук ще прекарам двата хеша
Благодаря за съвета, явно доста съм зациклил.
Всъщност аз се подведох по това че ти ми говориш за забравена парола, тук не става дума за това. Да обясна, потребителя въвежда парола за мейл кутия която трябва да може да се използва за пращане на мейл, самият phpmailer взима потребител, парола, mail server incoming и outgoing. Всичко това се взима от базата.
Аз не намираме механизъм по който може да се изпълни това за което говоря а именно паролата за
$mail->Password = $row2['smtppass']; // SMTP password
да мине през
$options = ['cost' => 12];
$tt = password_hash($password, PASSWORD_BCRYPT, $options);
при проверка
password_verify($password, $tt) - първия параметър търси "чистата" парола а от къде да я вземе! Тук се изпада в патова ситуация. Понеже ние имаме само "хеш".
пс: В няколко проекта сравнително големи който използват password_hash забелязвам че пазят паролата за изпращане не мейл в чист вид.
А тези пароли и потребители за SMTP, само за твоето приложение ли е са? Т.е. не всеки потребител на твоето приложение може да изпраща с негови SMTP настройки през твоето приложение.
Или искаш да си запишеш някъде пароли и потребители за използване на някои сървиси, които се използват от ТВОЕТО приложение.
Ако е второто, погледни за dotenv: https://github.com/vlucas/phpdotenv. Тези credentials не е нужно да бъдат хеширани, а по-скоро да бъдат "сложни" и недостъпни от външни потребители.
Да правилно си ме разбрал, всеки си въвежда данни за смтп и ползва своя мейл. Сетих се и аз за второто ти предложение и ще го пробвам. Идеята е проста все ден трябва да се пишат репорти който да съдържат информация, понеже ни е писнало от това да си писал половин ден и нещо да крашне и да се загуби писането си правя нещо което да го пази автоматично и на края на смяната ако забравиш да го пратиш го праща вместо теб, както казах по-горе желая да ми е лесно затова и се автоматизирам. Благодаря за насоките.
- 1
15 Ноември 11:02