Преобразование массива JavaScript в PHP с использованием fetch, а затем отправка электронной почты - PullRequest
0 голосов
/ 31 декабря 2018

Я изо всех сил пытаюсь преобразовать мой массив писем JavaScript в массив PHP, который я затем могу отправить по электронной почте обратно, используя мой localhost.

У меня есть поле ввода в моем html, которое заполняетсяпользователь (по одному), который использует .push в JavaScript, чтобы поместить их в массив.Я попытался использовать fetch, чтобы затем преобразовать этот массив в PHP, который затем я могу использовать для отправки электронного письма обратно на адреса электронной почты с помощью PHPMailer.

Сообщения электронной почты не отображаются в моей консоли в виде массива, но будут отображаться, если я изменю тип содержимого на «Content-Type»: «application / x-www-form-urlencoded».Тем не менее, электронные письма по-прежнему не отправляются таким образом.

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

HTML:

<input type="text" id="names" placeholder="Name" />
<input type="text" id="emails" placeholder="Email address" />
<input type="button" onclick="addTo()" value="Add" />

<input type="button" id="done-button" onclick="completed()" value="Done" />

JavaScript:

var names = [];
var emails = [];
var allNumbers = [];

function addTo() {
    names.push(document.getElementById("names").value);
    document.getElementById("names").value = "";
    emails.push(document.getElementById("emails").value);
    document.getElementById("emails").value = ""; 
}

function completed() {
    var numbers = names.length;
        for (var i = 1; i <= numbers; i++) {
            allNumbers.push(i);
        }

    fetch("http://localhost:8888/fetchme.php", {
        method: "POST", // *GET, POST, PUT, DELETE, etc.
        mode: "no-cors", // no-cors, cors, *same-origin
        cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
        credentials: "same-origin", // include, *same-origin, omit
        headers: {
            "Content-Type": "application/json"
        },
        redirect: "follow", // manual, *follow, error
        referrer: "no-referrer", // no-referrer, *client
        body: emails // body data type must match "Content-Type" header
    }).then((response) => {console.log(response)}); // parses response to console
}

PHP:

<?php 
var_dump($_POST);

use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "example@gmail.com";
$mail->Password = "password";
$mail->setFrom('example@gmail.com', 'Example');

$emails = json_decode($_POST);

if (isset($emails)) {
    foreach ($emails as $email) {
        $mail->addAddress($email);
        $mail->Subject = 'Your Results';
        //Read an HTML message body from an external file, convert referenced images to embedded,
        //convert HTML into a basic plain-text alternative body
        //$mail->msgHTML(file_get_contents('index.html'), __DIR__);
        $mail->Body = 'Hello, this is my message.';
        $mail->AltBody = 'This is a plain-text message body';
        if (!$mail->send()) {
            echo "Mailer Error: " . $mail->ErrorInfo;
        } else {
            echo "Message sent!";
        }
    }
}
?>

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Попробуйте использовать class вместо id для имени и адресов электронной почты, затем попытайтесь получить значение в самом javascript с помощью журнала консоли, если вы получаете значение в javascript перед передачей его в PHP

0 голосов
/ 31 декабря 2018

Использование fetch() с массивом в качестве тела не отправляет строку JSON.На сервер отправляется список адресов электронной почты через запятую.В любом случае, PHP не поместит их в $_POST, потому что тело не является допустимой строкой запроса.

Во-первых, вы должны использовать JSON.stringify() для преобразования массива emails в строку JSON.Затем в PHP вы можете прочитать тело запроса с помощью http_get_request_body().

. Или вы можете построить строку запроса, чтобы установить ее в качестве тела запроса, и тогда вы сможете использовать $_POST нормально.

...