PHP Mailer возвращает true, но электронная почта не получена

#php #phpmailer

Вопрос:

Я использую PHP-рассылку на своем веб — сайте для своей контактной формы.

 <?php 
    use PHPMailerPHPMailerPHPMailer;
    use PHPMailerPHPMailerSMTP;
    use PHPMailerPHPMailerException;

    require 'phpmailer/PHPMailer/src/Exception.php'; 
    require 'phpmailer/PHPMailer/src/PHPMailer.php';
    require 'phpmailer/PHPMailer/src/SMTP.php';
    

    $name = $_POST['name'];
    $lastname = $_POST['lastname'];
    $phone = $_POST['phone'];
    $message = $_POST['textarea'];
    $from = $_POST['email'];
    $to = "support@domain.com"; 
    $subject = 'email from website';



    $mail = new PHPMailer();
    $mail->Host   = "smtp.hostinger.com";
    $mail->SMTPDebug = 0;
    $mail->CharSet = 'UTF-8';
    $mail->SMTPAuth   = true;
    $mail->Port       = 465;
    $mail->Username   = $to;
    $mail->Password   = "mypassword";
    $mail->SMTPSecure = "ssl";
    $mail->From = $from;
    $mail->FromName = $name;
    $mail->addReplyTo($from, $name);
    $mail->Subject  = $subject;
    $mail->isHTML(true);
    $mail->Body = "Sender": " . $name . " " . $lastname . " n <br/> Phone: ". $phone ." rn <br/> message: " . $message";;
    $mail->addAddress($to);


    
if(!$mail->Send())
{
   echo "Error sending: " . $mail->ErrorInfo;
}
else
{
   echo 'success';
}

?>
 

Как только я отправлю контактную форму на своем веб-сайте, приведенный выше код вернет success сообщение.

На самом деле электронное письмо не получено. Я дважды проверил все $_POST , значения правильные. Также дважды проверил свое имя пользователя и пароль (я изменил их в вопросе).

Что может привести к тому, что PHP Mailer вернет сообщение об успешном выполнении и не отправит электронное письмо?

Отладка почтовой программы PHP

 Sending with mail()<br>
Sendmail path: /usr/sbin/sendmail -t -i<br>
Envelope sender: <br>
To: support@domain.com<br>
Subject: =?UTF-8?B?15nXpteZ16jXqiDXp9ep16gg157XlNeQ16rXqA==?=<br>
Headers: Date: Sun, 19 Sep 2021 09:37:31  0000From: test11 amp;<test@gmail.comamp;>Reply-To: test11 amp;<test@gmail.comamp;>Message-ID: amp;<sK7qvbbNwmP2IikzBwV7c2mD3TqDUGwEOLeW2HZng@www.reboost.co.ilamp;>X-Mailer: PHPMailer 6.5.1 (https://github.com/PHPMailer/PHPMailer)MIME-Version: 1.0Content-Type: text/html; charset=UTF-8<br>
Result: true<br>
 

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

1. Вы не проверяете возвращаемое значение $mail->send() . Он возвращается false , если отправка почты не удалась.

2. What can cause PHP Mailer to return success message …вы не знаете, возвращает ли он сообщение об успешном выполнении, потому что вы не проверяете. Вы просто всегда повторяете «успех», несмотря ни на что. Проверьте возвращаемое значение функции send (). Он может завершиться неудачей без исключения PHP.

3. the try and catch is checking if $mail->send() return true or false …нет, это не так. Try/catch проверяет, возникает ли исключение. Это не имеет никакого отношения к возвращаемому значению функции.

4. Вам нужно сказать PHPMailer, чтобы он использовал smtp $mail->isSMTP();

5. Иногда «от» должно совпадать с адресом вашего имени пользователя для защиты от спама

Ответ №1:

Вам нужно сказать PHPMailer, чтобы он использовал SMTP

$mail->isSMTP();

OP ответил, указав следующую ошибку:

 Error sending: SMTP Error: The following recipients failed:  support@domain.com: <test@gmail.com>: Sender address rejected: not owned by user support@domain.com
 

Это может быть вызвано тем, что поле «от» отличается от имени входа в систему smtp.