我正在努力将JavaScript的电子邮件数组转换为PHP数组,然后可以使用本地主机将电子邮件发送回给我。
我在html中有一个由用户填充的输入字段(一次填充一个),该字段使用JavaScript中的.push将它们放入数组中。我试图使用fetch将数组转换为PHP,然后可以使用PHPMailer将其发送回电子邮件地址。
这些电子邮件没有作为数组显示在控制台中,但是如果将内容类型更改为“ Content-Type”:“ application / x-www-form-urlencoded”,则可以。但是,仍然没有以这种方式发送电子邮件。
这仅适用于小型uni项目,这就是为什么我只担心通过本地主机发送电子邮件的原因,因为我不会在任何地方托管该项目。
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!";
}
}
}
?>
答案 0 :(得分:0)
将$_POST
与数组一起用作正文不会发送JSON字符串。发送到服务器的是电子邮件地址的逗号分隔列表。无论如何,PHP不会将它们放入JSON.stringify()
中,因为正文不是有效的查询字符串。
首先,您应该使用emails
将http_get_request_body()
数组转换为JSON字符串。然后,在PHP中,您可以使用$_POST
读取请求正文。
或者,您可以构建查询字符串以将其设置为请求的正文,然后您就可以正常使用Copy-Item -Path "C:\Temp\somefolder" -Force -PassThru |
Get-ChildItem |
Compress-Archive -DestinationPath ""C:\Temp\somefolder.zip"
。
答案 1 :(得分:0)
尝试使用 class 代替 id 来命名姓名和电子邮件, 然后尝试通过控制台日志在javascript本身中获取价值,如果您在将其传递给PHP之前在javascript中获得了价值