电子邮件未发送给用户

时间:2019-06-04 11:46:20

标签: php phpmailer

我有一个联系表,用户输入他们的个人信息和想要发送给我的消息(管理员),结果是我将收到一封电子邮件,其中包含他们的信息和发送的消息,同时用户将收到一封电子邮件,说明他们的信息已成功发送。目前所有这些工作正常,但问题是,仅当我强制执行此消息时,该消息才会发送给用户,这意味着哦,函数“ addAddress”我键入了我要发送到的电子邮件地址,但我想发送给填写该表格的每个人,但该表格不起作用,只会发送给我(管理员)

$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 个答案:

答案 0 :(得分:1)

在代码中:

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

发送第一封邮件后,您已将用户重定向到另一个页面。 重定向$_POST后,数据将丢失,因此不会触发第二封电子邮件。

答案 1 :(得分:0)

没有Porto这样的属性;它只是Port,因此它将使用默认端口25。

不要这样做:

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

那是伪造的,Gmail不允许您这样做。将您自己的地址放在发件人地址中(就像您对管理员电子邮件所做的一样),然后将提交者放入回复对象中(就像您已经在做的那样)。

创建两个PHPMailer实例非常浪费-创建一个实例并使用它发送两条消息。这也将允许您使用keepalive,这将使发送速度更快。

您使用的是旧版本的PHPMailer,因此我已经更新了脚本以使用当前版本,并使用composer加载了该脚本-如果您尚未使用它,那么现在是学习的好时机。 / p>

如果提交者的电子邮件地址属性不是有效的地址(您以前没有发现过的地址),它也不会发送。

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;
}