You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 7 结合 PHP 实现邮件发送时出现连接拒绝错误求助

解决Angular 7表单对接PHP后端时的连接拒绝问题

看起来你遇到的ERR_CONNECTION_REFUSED是前端无法连接到PHP服务器导致的,同时代码里还有几个细节问题需要修正,我一步步帮你排查解决:

1. 先确认PHP服务器是否正常运行

这个错误最常见的原因是你没有启动PHP内置服务器,或者服务器端口与配置不匹配。请按以下步骤操作:

  • 打开终端,切换到你的Angular项目根目录
  • 运行命令启动PHP服务器:
    php -S 127.0.0.1:8080
    
  • 启动后,在浏览器直接访问http://127.0.0.1:8080/src/app/contact/contactMail.php,如果能看到页面(哪怕是空白或报错),说明服务器已正常运行。

2. 修正ApiService的请求参数与路径错误

你的sendEmail方法存在两个问题:

  • POST请求发送的是this.contact而非传入的表单数据form,导致PHP拿不到表单信息
  • 请求URL路径与文件实际位置不匹配

修改api.service.ts的sendEmail方法:

sendEmail(form): Observable<Contact[]>{
  // 把请求参数改为传入的form,同时修正URL路径
  return this.httpClient.post<Contact[]>(`${this.PHP_API_SERVER}/src/app/contact/contactMail.php`, form);
}

3. 优化PHP代码的健壮性

原PHP代码在未接收到数据或JSON解析失败时会直接报错,建议修改为:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST");
header('Access-Control-Allow-Headers: Content-Type');

// 获取POST数据
$postdata = file_get_contents("php://input");

// 检查是否接收到数据
if(empty($postdata)) {
  http_response_code(400);
  echo json_encode(['message' => 'No data received']);
  exit;
}

// 解析JSON并检查是否成功
$request = json_decode($postdata);
if($request === null) {
  http_response_code(400);
  echo json_encode(['message' => 'Invalid JSON format']);
  exit;
}

// 安全提取表单数据(避免属性不存在报错)
$name = htmlspecialchars($request->name ?? '');
$email = htmlspecialchars($request->email ?? '');
$phone = htmlspecialchars($request->phone ?? '');
$project = htmlspecialchars($request->project ?? '');
$notes = htmlspecialchars($request->notes ?? '');

$emailTo = "jg@gmail.com";
$to = $emailTo;
$subject = "Correspondence from the Website";
// 优化发件人格式,降低被标记为垃圾邮件的概率
$headers = "From: " . $name . " <" . $email . ">\r\n";
$body = "Name: ".$name."\n Email: ".$email."\n Would like info on: " .$project." \nComments: " .$notes." \n";
$body = wordwrap($body,70);

// 检查邮件发送状态并返回对应结果
if(mail($to, $subject, $body, $headers)) {
  $result = array('message'=>"Thank You " .$name." Your request has been sent.");
  echo json_encode($result);
} else {
  http_response_code(500);
  echo json_encode(['message' => 'Failed to send email']);
}

注意:本地环境下mail()函数可能无法直接发送邮件,若需测试可使用PHPMailer等库或配置本地邮件服务器。

4. 更规范的文件结构建议

把PHP后端文件和Angular源码混放不够规范,建议在项目根目录新建backend文件夹,将contactMail.php移入其中,然后启动PHP服务器时指定该文件夹为根目录:

cd /path/to/your/angular-project
php -S 127.0.0.1:8080 -t backend

此时请求URL可简化为${this.PHP_API_SERVER}/contactMail.php,结构更清晰。

按照以上步骤调整后,应该就能解决连接拒绝问题,同时保证表单数据能正确传递到PHP后端。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:34:10