我尝试用php和axios发送邮件。我将数据存储在某些属性上,然后尝试通过axios调用post方法。电子邮件已发送但值为空。看来我无法在php中获得此值。
// js
axios
.post("./vendor/sendmail.php", {
name: nameInput.value,
email: emailInput.value,
message: textarea.value
})
.then(respond => {
console.log(respond);
})
.catch(error => {
console.log(error);
});
// php
<?php
$email = $_POST['email'];
$message = $_POST['message'];
$name = $_POST['name'];
$body = "Email: {$email}\n\nName: {$name}\n\nMessage: {$message}\n\n";
mail("myemail@gmail.com", 'A new message', $body, "From: test@gmail.com");
?>
我在收件箱中收到此邮件:
电子邮件:
名称:
消息:
(带有空值的电子邮件)
答案 0 :(得分:1)
Axios可能会将其编码为JSON。您需要将输入读入PHP,而不是$_POST
变量。给我一点时间,准备研究一些代码。
它的作用是检测Content-Type
标头,如果它是application/json
,它将把输入读入PHP并解码。可以使用try / catch,以防JSON无效。
function convertInput() {
if (!empty($_SERVER["HTTP_CONTENT_TYPE"])) {
$contentTypes = explode(";", $_SERVER["HTTP_CONTENT_TYPE"]);
if (in_array("application/json", $contentTypes)) {
$rawInput = file_get_contents('php://input');
return json_decode($rawInput, true);
}
}
return [];
}