Angular发送FormData到PHP发邮件时PHP变量为空问题求助
问题根因
你代码里存在两处格式不匹配的错误,导致PHP无法正确读取参数:
- 前端发送的是
FormData格式数据,但手动指定了Content-Type: application/json的请求头,和实际传输的数据格式冲突 - 后端按照JSON格式解析请求数据,和前端发送的
multipart/form-data格式不匹配
修复方案
前端修改(TypeScript部分)
发送FormData时不需要手动设置Content-Type请求头,Angular的HttpClient会自动识别FormData类型,设置正确的multipart/form-data头以及边界值,删除你代码里的httpOptions相关代码即可。
修改后的onSubmit方法请求部分代码:
// 删除原有的httpOptions定义,直接传递formData即可 this.http.post(this.serverUrl, formData).subscribe( // 后面的回调逻辑保持不变即可
后端修改(PHP部分)
FormData格式的提交数据不需要从php://input读取解析,直接用PHP内置的$_POST全局变量读取参数即可:
<?php // 直接从$_POST中取对应参数,加判空避免报错 $name = $_POST['name'] ?? '匿名用户'; $to = "example@mail.com"; $title = "From: $name"; $body = "test"; $body = wordwrap($body, 70); $header = "MIME-Version: 1.0\r\n"; $header.= "Content-Type: text/plain; charset=utf-8\r\n"; $header.= "X-Priority: 1\r\n"; mail($to, $title, $body, $header); ?>
额外注意事项
- 要确保你的PHP环境已正确配置邮件发送服务(sendmail或SMTP服务),否则
mail函数无法正常发送邮件 - 可以在PHP代码中加入参数校验和返回值,方便前端排查后续问题,比如参数为空时返回错误状态码
内容的提问来源于stack exchange,提问作者Fictor
相关产品推荐
相关产品推荐

