Mail Error - ›Вы должны указать хотя бы один адрес электронной почты получателя

я использую php mailer для отправки пользователям ссылок на забвение пароля, это мой код

<?php require "config.php";?>
<?php
    use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer\src\Exception.php';

/* The main PHPMailer class. */
require 'PHPMailer\src\PHPMailer.php';

/* SMTP class, needed if you want to use SMTP. */
require 'PHPMailer\src\SMTP.php';


?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Forgot Password System</title>
     <script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
   <form method="post" action="<?php $_SERVER['PHP_SELF']?>">
      <p>Enter Email Address To Send Password Link</p>
      <input type="text" name="email">
      <input type="submit" name="submit_email">
    </form>
 <?php

if(isset($_POST['submit_email']) && $_POST['email'])
{
 $email = $_POST['email'];
  $select=mysqli_query($con,"SELECT email,password from users where email='$email'");
  if(mysqli_num_rows($select)==1)
  {
    while($row=mysqli_fetch_array($select))
    {
      $email=md5($row['email']);
      $pass=md5($row['password']);
    }
    $link="<a href='www.samplewebsite.com/reset.php?key=".$email."&reset=".$pass."'>Click To Reset password</a>";


    $mail = new PHPMailer();
    $mail->CharSet =  "utf-8";
    $mail->IsSMTP();
    // enable SMTP authentication
    $mail->SMTPAuth = true;                  
    // GMAIL username
    $mail->Username = "[email protected]";
    // GMAIL password
    $mail->Password = "your_gmail_password";
    $mail->SMTPSecure = "ssl";  
    // sets GMAIL as the SMTP server
    $mail->Host = "smtp.gmail.com";
    // set the SMTP port for the GMAIL server
    $mail->Port = "465";
    $mail->From='[email protected]';
    $mail->FromName='your_name';
    $mail->AddAddress('reciever_email_id', 'reciever_name');
    $mail->Subject  =  'Reset Password';
    $mail->IsHTML(true);
    $mail->Body    = 'Click On This Link to Reset Password '.$pass.'';
    if($mail->Send())
    {
      echo "Check Your Email and Click on the link sent to your email";
    }
    else
    {
      echo "Mail Error - >".$mail->ErrorInfo;
    }
  } 
}
?>


</body>
</html>

у меня возникает эта ошибка, когда я нажимаю кнопку отправки. Ошибка почты -> Вы должны указать хотя бы один адрес электронной почты получателя. я не знаю, что я делаю неправильно, на самом деле я скопировал этот код для своего веб-сайта, я не знаю, что не так в этом коде и почему он показывает мне эту ошибку


person dhurv sunoly    schedule 09.11.2018    source источник
comment
Вы не указываете, куда отправлять почту... 'receiver_email_id' — это строка, которая не является адресом электронной почты.   -  person Jonnix    schedule 09.11.2018
comment
как использовать значение, данное пользователем   -  person dhurv sunoly    schedule 09.11.2018
comment
Используйте $row['email'], наверное?   -  person Jonnix    schedule 09.11.2018
comment
Кстати, md5 (особенно без соли) никоим образом не безопасен. И у вас есть уязвимости SQL-инъекций в вашем коде.   -  person Jonnix    schedule 09.11.2018
comment
Электронная почта @Stender $ превращается в хэш md5.   -  person Jonnix    schedule 09.11.2018
comment
^^ полезно - но именно здесь он должен добавить получателей..   -  person Stender    schedule 09.11.2018
comment
подождите... он вне цикла while - Так что этого больше не будет   -  person Stender    schedule 09.11.2018


Ответы (1)


Замените эти строки

$mail->From='[email protected]';
$mail->AddAddress('reciever_email_id', 'reciever_name');

с этим

$mail->setFrom('[email protected]', 'mailer_name'); 
$mail->addAddress('[email protected]');

проверьте пример электронной почты для получения дополнительной информации

для ошибки ниже (согласно вашему комментарию)

$mail->Host = "ssl://smtp.gmail.com"; //add this host

и проверьте расширение open_ssl и измените port 465 на 587

вот полный код

//Create a new PHPMailer instance
    $mail = new PHPMailer;   
    $mail->isSMTP();
// change this to 0 if the site is going live
    $mail->SMTPDebug = 2;
    $mail->Debugoutput = 'html';
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';

 //use SMTP authentication
    $mail->SMTPAuth = true;
//Username to use for SMTP authentication
    $mail->Username = "[email protected]";
    $mail->Password = "******";
    $mail->setFrom('[email protected]', 'Somebody');
    $mail->addReplyTo('[email protected]', 'Somebody');
    $mail->addAddress('[email protected]', 'Somebody');
    $mail->Subject = 'New contact from somebody';
    // $message is gotten from the form
    $mail->msgHTML($message);
$mail->AltBody = $filteredmessage;
    if (!$mail->send()) {
        echo "We are extremely sorry to inform you that your message
could not be delivered,please try again.";
    } else {
        echo "Your message was successfully delivered,you would be contacted shortly.";
        }

Справочник

person Bilal Ahmed    schedule 09.11.2018
comment
он работал, но теперь он показывает другую ошибку Mail Error - › SMTP connect() failed. github.com/PHPMailer/PHPMailer/wiki/Troubleshooting - person dhurv sunoly; 09.11.2018
comment
добавить этот хост $mail->Host = "ssl://smtp.gmail.com"; - person Bilal Ahmed; 09.11.2018
comment
все еще не решает - person dhurv sunoly; 09.11.2018
comment
вы проверили расширение open_ssl ? - person Bilal Ahmed; 09.11.2018
comment
я на локальном хосте - person dhurv sunoly; 09.11.2018
comment
Все началось хорошо... Если вы укажете ssl в свойстве Host, оно переопределит то, что находится в SMTPSecure, и комбинация режима ssl и Port = 587 не будет работать. Это было хорошо, как это было. Лучшим примером для использования в этом случае является gmail . - person Synchro; 09.11.2018