Добрый день! Разбираюсь с возможностями отправить почту. Учусь самостоятельно и одно из заданий как раз отправить email с сайта. Пока есть проблемы с mail() функцией, но сейчас еще пробую phpmailer. Возникли две проблемы: 1) gmail не авторизирует и выдает ошибку Код (Text): SMTP Error: Could not authenticate. Message could not be sent. Mailer Error: SMTP Error: Could not authenticate. Код (Text): $mail->Host="smtp.gmail.com";// change to your email host $mail->Port=587;// change to your email port 2) попробовала с yandex, то yandex даже к smtp не подключает Код (Text): $mail->Host = "smtp.yandex.com"; $mail->Port = 587; //также пробовала smtp.yandex.ru Код (Text): SMTP Error: Could not connect to SMTP host. Message could not be sent. Mailer Error: SMTP Error: Could not connect to SMTP host. Буду очень благодарна за помощь.
У тебя для gmail и yandex думаю не все настройки в PHPMailer указаны, как того просят: https://yandex.ru/support/mail/mail-clients.xml PHP: защита соединения — SSL; порт — 465.
я видела эту страничку, и изначально ввела эту информацию. но получила эту ошибку о невозможности подключиться к smtp. потом еще почитала и нашла, что нужно использовать tls и 587
@Vitale ну показывай для яндекса, потому что я вписываю их настройки и всё работает. Дай код который у тебя в итоге получился.
я делала на облаке, поэтому есть вероятность, что проблема с настройками облака, потому что gmail не авторизирует, а яндекс не подключает вообще. Сейчас попробую уточнить на форуме этого облака, и если там все нормально, то вернусь. --- Добавлено --- Вот код: Код (Text): <?php // configuration require("../includes/config.php"); require("libphp-phpmailer/class.phpmailer.php"); if (isset($_SESSION["id"])) { //use custom query function to retrieve data $row = CS50::query("SELECT username, email FROM users WHERE id = ?", $_SESSION["id"]); $email = $row[0]["email"]; $name = $row[0]["username"]; // сюда я еще должна добавить проверку имени и email, как мне посоветовали в другом моем посте /*** // wanted to have a secure link, but for now commenting it out $salt = "3453#2K:90k≈“π631%380‘“HJK0D*7WPJ987NU"; // Create the unique user password reset key $password = hash('sha512', $salt.$email); // url to reset password $reset_url = "https://ide-name.io/new_password.php?q=".$password; ***/ $reset_url = "https://ide-name.io/new_password.php"; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.gmail.com"; $mail->Port = 587; $mail->Username = "myemail@gmail.com"; $mail->Password = "mypass"; $mail->SetFrom("myemail@gmail.com"); $mail->AddAddress($email); $mail->Subject = "Requested link"; $mail->Body = "Dear $name,\n\nYou have requested to reset your password . \n\nTo reset your password, please click the link below.\n\n".$reset_url."\n\nThank you!"; if(!$mail->Send()) { echo "Message could not be sent. <p>"; echo "Mailer Error: " . $mail->ErrorInfo; apologize("Couldn't send email"); } else { // render form render("email_link_form.php", ["email" => $email]); } } else { redirect("login.php"); } ?>
ПыСы: в гмайле ещё надо разрешить подключаться к smtp. По умолчанию эта функция в настройках отключена