За последние 24 часа нас посетили 22283 программиста и 1158 роботов. Сейчас ищут 735 программистов ...

phpmailer не отправляет почту

Тема в разделе "PHP для новичков", создана пользователем Vitale, 4 авг 2016.

Метки:
  1. Vitale

    Vitale Новичок

    С нами с:
    4 авг 2016
    Сообщения:
    12
    Симпатии:
    0
    Добрый день!
    Разбираюсь с возможностями отправить почту. Учусь самостоятельно и одно из заданий как раз отправить email с сайта. Пока есть проблемы с mail() функцией, но сейчас еще пробую phpmailer.

    Возникли две проблемы:
    1) gmail не авторизирует и выдает ошибку

    Код (Text):
    1. SMTP Error: Could not authenticate. Message could not be sent. Mailer Error: SMTP Error: Could not authenticate.
    Код (Text):
    1. $mail->Host="smtp.gmail.com";// change to your email host
    2.     $mail->Port=587;// change to your email port
    2) попробовала с yandex, то yandex даже к smtp не подключает

    Код (Text):
    1. $mail->Host = "smtp.yandex.com";
    2. $mail->Port = 587;
    3.  
    4. //также пробовала smtp.yandex.ru
    Код (Text):
    1. SMTP Error: Could not connect to SMTP host. Message could not be sent.
    2. Mailer Error: SMTP Error: Could not connect to SMTP host.
    Буду очень благодарна за помощь.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    У тебя для gmail и yandex думаю не все настройки в PHPMailer указаны, как того просят:

    https://yandex.ru/support/mail/mail-clients.xml
    PHP:
    1. защита соединения — SSL;
    2. порт — 465.
     
  3. Vitale

    Vitale Новичок

    С нами с:
    4 авг 2016
    Сообщения:
    12
    Симпатии:
    0
    я видела эту страничку, и изначально ввела эту информацию. но получила эту ошибку о невозможности подключиться к smtp. потом еще почитала и нашла, что нужно использовать tls и 587
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Vitale ну показывай для яндекса, потому что я вписываю их настройки и всё работает.
    Дай код который у тебя в итоге получился.
     
  5. Vitale

    Vitale Новичок

    С нами с:
    4 авг 2016
    Сообщения:
    12
    Симпатии:
    0
    я делала на облаке, поэтому есть вероятность, что проблема с настройками облака, потому что gmail не авторизирует, а яндекс не подключает вообще. Сейчас попробую уточнить на форуме этого облака, и если там все нормально, то вернусь.
    --- Добавлено ---
    Вот код:
    Код (Text):
    1. <?php
    2.  
    3.         // configuration
    4.         require("../includes/config.php");
    5.         require("libphp-phpmailer/class.phpmailer.php");
    6.  
    7.         if (isset($_SESSION["id"]))
    8.         {
    9.             //use custom query function to retrieve data
    10.               $row = CS50::query("SELECT username, email FROM users WHERE id = ?", $_SESSION["id"]);
    11.             $email = $row[0]["email"];
    12.             $name = $row[0]["username"];
    13. // сюда я еще должна добавить проверку имени и email, как мне посоветовали в другом моем посте
    14.             /***
    15.             // wanted to have a secure link, but for now commenting it out
    16.             $salt = "3453#2K:90k≈“π631%380‘“HJK0D*7WPJ987NU";
    17.         // Create the unique user password reset key
    18.         $password = hash('sha512', $salt.$email);
    19.         // url to reset password
    20.         $reset_url = "https://ide-name.io/new_password.php?q=".$password;
    21.         ***/
    22.  
    23.         $reset_url = "https://ide-name.io/new_password.php";
    24.         $mail = new PHPMailer();
    25.         $mail->IsSMTP();
    26.         $mail->SMTPAuth = true;
    27.         $mail->SMTPSecure = "tls";
    28.  
    29.         $mail->Host = "smtp.gmail.com";
    30.         $mail->Port = 587;
    31.         $mail->Username = "myemail@gmail.com";
    32.         $mail->Password = "mypass";
    33.         $mail->SetFrom("myemail@gmail.com");
    34.  
    35.         $mail->AddAddress($email);
    36.         $mail->Subject = "Requested link";
    37.         $mail->Body = "Dear $name,\n\nYou have requested to reset your password .
    38.                        \n\nTo reset your password, please click the link below.\n\n".$reset_url."\n\nThank you!";
    39.  
    40.         if(!$mail->Send())
    41.         {
    42.             echo "Message could not be sent. <p>";
    43.             echo "Mailer Error: " . $mail->ErrorInfo;
    44.             apologize("Couldn't send email");
    45.         }
    46.         else
    47.         {
    48.             // render form
    49.             render("email_link_form.php", ["email" => $email]);
    50.         }
    51.  
    52.     }
    53.     else
    54.     {
    55.         redirect("login.php");
    56.     }
    57.  
    58. ?>
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Странно, думаю должно работать, пробуй на другом хсотинге или у себя на компьютере локально.
     
  7. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    ПыСы: в гмайле ещё надо разрешить подключаться к smtp. По умолчанию эта функция в настройках отключена
     
    denis01 нравится это.
  8. Vitale

    Vitale Новичок

    С нами с:
    4 авг 2016
    Сообщения:
    12
    Симпатии:
    0
    Вот код:
    Да, я это отключила сразу
     
  9. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Нету кода