如何解决textarea内容通过PHP发送邮件为空的问题?
解决textarea内容通过邮件发送为空的问题
我来帮你一步步排查这个邮件发送后textarea内容为空的问题,结合你的PHP代码,主要从以下几个方向入手:
1. 先确认前端是否正确发送了msn字段
首先要排查前端是否把textarea的内容正确打包进了JSON请求里:
- 确保前端发送的JSON数据中包含
msn键,对应textarea的真实值。比如用fetch发送请求的示例代码:fetch('你的PHP文件路径.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ 'nombre-contacto-2': document.getElementById('nombre-input').value, 'email-contacto-2': document.getElementById('email-input').value, 'msn': document.getElementById('你的textarea-id').value // 这里必须准确获取textarea的值 }) }); - 你可以在PHP代码里先打印所有接收的输入,确认
msn字段是否存在且有值:$input = json_decode(file_get_contents("php://input"), true); var_dump($input); // 输出所有接收的字段,检查msn的状态 exit;
2. 修复PHP代码里的变量初始化问题
你的代码中$MESSAGE_BODY直接进行拼接,但没有提前初始化,虽然PHP允许这种写法,但可能导致意外的未定义变量问题,建议先初始化变量:
// 初始化变量并添加分隔符,让内容更清晰 $MESSAGE_BODY = "MENSAJE: " . $input['msn'];
3. 验证JSON解码是否成功
如果前端发送的JSON格式有误,json_decode会返回null,导致你无法获取任何字段值。可以增加解码校验:
$rawInput = file_get_contents("php://input"); $input = json_decode($rawInput, true); // 检查JSON解码是否成功 if ($input === null) { die("JSON解析失败: " . json_last_error_msg()); }
同时要确保前端请求的Content-Type头设置为application/json,否则php://input的内容可能不是标准的JSON格式。
4. 检查字段名拼写是否一致
PHP的数组键名是大小写敏感的!要确保前端发送的字段名是msn,和你PHP代码中$input['msn']的写法完全一致,比如前端不能写成MSN或者message。
5. 测试邮件内容是否正确生成
在调用mail()函数之前,先打印$MESSAGE_BODY,确认内容是否正确:
echo $MESSAGE_BODY; // 查看邮件内容是否包含textarea的值 exit;
如果这里能看到正确的内容,那问题可能出在邮件发送环节(比如服务器邮件配置、邮件头格式);如果这里还是为空,那就是前面的字段接收或拼接环节有问题。
内容的提问来源于stack exchange,提问作者paul zapata
相关产品推荐
相关产品推荐

