PhpMailer отправляет регистрационную форму на электронную почту 3 раза - PullRequest
0 голосов
/ 11 октября 2019

Одна и та же информация регистрационной формы приходит на мою почту более одного раза. Мой почтовый ящик заполнен точно такими же формами. Можете ли вы помочь мне решить эту проблему?

КОД PHP:

          <?php
    require("phpmailer/class.phpmailer.php");
    $mail = new PHPMailer(); // create a new object

         $mail = new PHPMailer(); // create a new object
                    $subject = "[XX] Registration Form";
                    $question = nl2br(stripcslashes($_POST['question']));
                    $question = trim($question);
                    $email_message = "<b>Name:</b> ".stripcslashes($_POST['fname'])."<br><br>";
                    $email_message .= "<b>Surname:</b> ".stripcslashes($_POST['lname'])."<br><br>";
                    $email_message .= "<b>Birthday:</b> ".stripcslashes($_POST['dob'])."<br><br>";    
$email_message .= "<b>Phone:</b> ".stripcslashes($_POST['phone'])."<br><br>";
$email_message .= "<b>Email:</b> ".stripcslashes($_POST['email'])."<br><br>";
$email_message .= "<b>Address:</b> ".stripcslashes($_POST['adres'])."<br><br>";
$email_message .= "<b>Location:</b> ".stripcslashes($_POST['Location'])."<br><br>";                              
                    $body = $email_message;
                    $mail->IsSMTP(); // enable SMTP
                    $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
                    $mail->SMTPAuth = true; // authentication enabled
                    $mail->Host = "smtp.yandex.com.tr";
                    $mail->SMTPSecure = 'ssl';
                    $mail->Port = 465; // or 465
                    $mail->IsHTML(true);
                    $mail->CharSet  ="utf-8";
                    $mail->SetFrom("info@xx.com", "XX REGISTRATION FORM"); // Mail adresi

                    $mail->Username = "info@xx.com"; // Mail adresi
                    $mail->Password = "xxx"; // Parola
                    $mail->Subject = $subject;
                    $mail->body = $body;
                    $mail->MsgHTML($body);
                    $mail->AddAddress("info@xx.com");
                    $mail->addReplyTo(stripcslashes($_POST['emailer']), "");

                    if(!$mail->Send()){
                            echo "Mail Error".$mail->ErrorInfo;} else {            
                    echo "Mesaj Gönderildi";
                    }

1 Ответ

0 голосов
/ 11 октября 2019

Скорее всего, скрипт просто запускается более одного раза. Это может быть вызвано плагинами браузера или невозможностью обработки пустых форм. Защитите от отправки пустых сообщений во время загрузки страницы, поместив ее в условие, подобное следующему:

if (isset($_POST['emailer'])) {
    //Rest of your script

Главное, чтобы сначала проверить, отправляет ли один запуск вашего сценария несколько сообщений, или же сценарийвыполняется более одного раза (отправка одного сообщения каждый раз). Попробуйте записать что-нибудь в файл журнала или сделать это очевидным в полученных сообщениях, добавив случайное число в конец строки темы. Если вы получаете два сообщения с тем же номером в теме, они являются истинными дубликатами;если числа - разные темы, ваш скрипт запускается более одного раза:

$mail->Subject = 'Hi ' . rand();

Некоторые другие проблемы:

$mail->body = $body;

В свойствах PHP учитывается регистр, поэтому его следует$mail->Body = $body;, но вы также звоните $mail->MsgHTML($body);, который устанавливает для вас свойство Body, поэтому вам не нужно также настраивать body самостоятельно.

Пока вы работаете надскрипт $mail->SMTPDebug = 1 не очень полезен, так как не показывает, что говорит сервер;установить $mail->SMTPDebug = 2. Не забудьте установить его равным 0 в производственном процессе!

Я также вижу, что вы используете очень старую версию PHPMailer и основали свой код на устаревшем примере, поэтому update .

...