Электронная почта не отправляется пользователю - PullRequest
1 голос
/ 04 июня 2019

У меня есть контактная форма, где пользователь вводит свою личную информацию и сообщение, которое хочет отправить мне (администратору), что произойдет, если я получу электронное письмо с его информацией и отправленным сообщением, и в то же время время пользователь получит электронное письмо о том, что его информация была успешно отправлена. В этот момент все это работает, но проблема в том, что сообщение отправляется пользователю только тогда, когда я его принудительно заставляю, а это означает, что функция «addAddress» я набираю адрес электронной почты, на который я хочу перейти, но я хотел бы для отправки всем, кто заполняет эту форму, которая не работает, он только отправляет мне (admin)

$sql = "INSERT INTO Mensagem (NomeM, EmailMen, Assunto, Mensagem) VALUES ('$NomeM', '$EmailMen','$Assunto', '$Mensagem')";
$res = $lig->query($sql);

if (isset($_POST['submit'])){
    require 'PHPMailer/PHPMailerAutoload.php';

    $mail = new PHPMailer;

    $mail->Host='smtp.gmail.com';
    $mail->Porto = 587;
    $mail->SMTPAuth = true;
    $mail->SMTPSecure='tls';
    $mail->Username='admin@gmail.com';
    $mail->Password='***';

    $mail->setFrom($_POST['EmailReser']);
    $mail->addAddress('admin@gmail.com');
    $mail->addReplyTo($_POST['EmailReser']);

    $mail->isHTML(true);
    $mail->Subject='New message from your website';
    $mail->Body = "message from user";

    if(!$mail->send()) {
        $result="Something went wrong. Try again";
    } else {
        header('Location: index.php?cmd=home');

        //========  User  ========
        $mail = new PHPMailer;
        $mail->Host='smtp.gmail.com';
        $mail->Porto = 587;
        $mail->SMTPAuth = true;
        $mail->SMTPSecure='tls';
        $mail->Username='admin@gmail.com';
        $mail->Password='***';

        $mail->setFrom('admin@gmail.com');
        $mail->addAddress($_POST['EmailReser']);  // If i added 'user@gmail.com' it would work
        $mail->addReplyTo('admin@gmail.com');

        $mail->isHTML(true);
        $mail->Subject='Your message was received';
        $mail->Body = "message from admin";

        if(!$mail->send()){
            $result="Something went wrong. Try again";
        } else{
            header('Location: index.php?cmd=home');
        }
    }
}

Ответы [ 2 ]

1 голос
/ 04 июня 2019

в коде по адресу:

...
} else {
    header('Location: index.php?cmd=home');
...

Вы перенаправили пользователя на другую страницу после отправки первой почты. После перенаправления $_POST данные теряются, поэтому второе электронное письмо не будет запущено.

0 голосов
/ 04 июня 2019

Нет такого свойства как Porto; это просто Port, поэтому он будет использовать порт по умолчанию 25.

Не делай этого:

$mail->setFrom($_POST['EmailReser']);

это подделка и gmail не позволит вам это сделать. Поместите свой адрес в адрес отправителя (как вы делаете для электронной почты администратора) и отправьте отправителя в ответ (как вы уже делаете).

Создание двух экземпляров PHPMailer расточительно: создайте один и отправьте оба сообщения вместе с ним. Это также позволит вам использовать keepalive, что ускорит отправку.

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

Он также не будет отправлять, если свойство адреса электронной почты отправителя не является действительным адресом, который вы не уловили раньше.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require '../vendor/autoload.php';

$mail = new PHPMailer(true); //Enable exceptions
try {
    //Set all common properties
    $mail->SMTPKeepAlive = true;
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'tls';
    $mail->Username = 'admin@gmail.com';
    $mail->Password = '***';
    $mail->isHTML(true);

    //Set up recipients
    $mail->setFrom('admin@gmail.com');
    $mail->addAddress('admin@gmail.com');
    $mail->addReplyTo($_POST['EmailReser']);

    $mail->Subject = 'New message from your website';
    $mail->Body = "message from user";

    //If this fails, it will be caught below, so no need for an `if`
    $mail->send();

    //Re-use existing instance
    //Reset recipients, don't need to touch reply-to or from address
    $mail->clearAddresses();
    $mail->addAddress($_POST['EmailReser']);

    $mail->Subject = 'Your message was received';
    $mail->Body = "message from admin";
    $mail->send();
    header('Location: index.php?cmd=home');
} catch (Exception $e) {
    echo 'Something went wrong. Try again ' . $mail->ErrorInfo;
}
...