Отправка почты формы более чем одному человеку PHP?

моя форма работает по назначению, но по какой-то причине электронное письмо будет отправлено только на одну из моих учетных записей электронной почты, а не на другую. Я помещаю правильный адрес электронной почты в поле электронной почты, так что это не проблема, однако я не вижу где я ошибаюсь, я предполагаю, что это потому, что я использую $email, чтобы получить адрес электронной почты, куда должно идти второе письмо ... вот мой php, где я ошибаюсь?

<?php
    $from = 'Pixel Wars - Press Inquiry';
    $to = "[email protected], $email";
    $subject = 'Press Inquiry from Pixelwars.com';

    function errorHandler ($message) {
        die(json_encode(array(
            'type'     => 'error',
            'response' => $message
        )));
    }

    function successHandler ($message) {
        die(json_encode(array(
            'type'     => 'success',
            'response' => $message
        )));
    }


    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']  == 'XMLHttpRequest') {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $body = "Name: $name\r\n Email: $email\r\n\r\n Message:\r\n $message";

        $pattern = '/[\r\n]|Content-Type:|Bcc:|Cc:/i';
        if (preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message)) {
            errorHandler('Header injection detected.');
        }

        // Check if name has been entered
        if (!$_POST['name']) {
            errorHandler('Please enter your name.');
        }

        // Check if email has been entered and is valid
        if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            errorHandler('Please enter a valid email address.');
        }

        // Check if message has been entered
        if (!$_POST['message']) {
            errorHandler('Please enter your message.');
        }

        // prepare headers
        $headers  = 'MIME-Version: 1.1' . PHP_EOL;
        $headers .= 'Content-type: text/plain; charset=utf-8' . PHP_EOL;
        $headers .= "From: $name <$email>" . PHP_EOL;
        $headers .= "Return-Path: $to" . PHP_EOL;
        $headers .= "Reply-To: $email" . PHP_EOL;
        $headers .= "X-Mailer: PHP/". phpversion() . PHP_EOL;

        // send the email
        $result = @mail($to, $subject, $body . "\r\n\n" .'------------------ '. "\r\n\n" .'Hello '.$name.' we will contact you as soon as possible about your query.' ."\n". 'Dont forget to keep visiting www.pixelwars.com for more updates and awesome content.' ."\n". 'We will email you back on the provided email below, thank you and have a nice day.' . "\r\n\n" .'-- '.$email, $headers);
        if ($result) {
            successHandler('Thank You! we will be in touch');
        } else {
            errorHandler('Sorry there was an error sending your message.');
        }
    } else {
        errorHandler('Allowed only XMLHttpRequest.');
    }
?>

Заранее спасибо, если кто сможет взломать


person ui-unicorn.co.uk    schedule 28.02.2017    source источник
comment
Возможный дубликат PHP отправляет почту на несколько адресов электронной почты   -  person James Hunt    schedule 28.02.2017
comment
@JamesHunt Я не думаю, что это дубликат - у OP есть синтаксис, но он не совсем правильный - указанная вами проблема - это вопрос о том, как создать код, соответствующий их требованиям.   -  person Kallum Tanton    schedule 28.02.2017
comment
Я думаю, ваша проблема в том, как сказал @chris85, что переменная $email не существует. Попробуйте переместить эти три объявления в начало документа.   -  person Kallum Tanton    schedule 28.02.2017


Ответы (2)


У вас нет назначенного $email при определении $to, поэтому ваш второй адрес не установлен.

Демонстрация: https://3v4l.org/QIIJu

Решение: переместите назначение $to дальше в сценарий. Также используйте отчеты об ошибках, это привело бы к неопределенному уведомлению о переменной.

e.g.

<?php
$from = 'Pixel Wars - Press Inquiry';
$subject = 'Press Inquiry from Pixelwars.com';
....

$to = "[email protected], $email";
$result = @mail($to, $subject, $body ....

потому что в этот момент определено $email. Также не используйте подавление ошибок, это просто скрывает полезную информацию. Если вы не хотите, чтобы он отображался, скройте отображаемые ошибки, но все равно регистрируйте их.

person chris85    schedule 28.02.2017
comment
Я согласен, во время разработки отчеты об ошибках могут значительно сэкономить время. Но, если есть сомнения, повторите это. ОП увидел бы по эху, что рядом с первым адресом электронной почты ничего не печатается. - person Kallum Tanton; 28.02.2017
comment
Спасибо, было бы разумно также определить имя и сообщение в верхней части PHP вместе с $email? - person ui-unicorn.co.uk; 28.02.2017
comment
@Neths Вы будете получать неопределенные уведомления, если они не установлены, но это мое предпочтительное место для заданий. Если ничего не должно произойти, если это не запрос AJAX, я бы переместил if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { в начало. - person chris85; 28.02.2017
comment
Это Ajax. У меня сейчас работает, почему-то не работало с $email = $_POST['email']; но это произошло с $email = filter_var($_POST[email], FILTER_SANITIZE_EMAIL); немного странно... но да, теперь я определил $email прямо вверху, и теперь он работает нормально, спасибо за вашу помощь. - person ui-unicorn.co.uk; 28.02.2017

Вам нужно добавить несколько адресов электронной почты в $to

$to = "[email protected], [email protected], [email protected]"

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

mail($email_to, $email_subject, $thankyou);

Спасибо

person Community    schedule 28.02.2017