如何解决错误500并使用Angular 8&;发送电子邮件;PHP

如何解决错误500并使用Angular 8&;发送电子邮件;PHP,php,angular8,Php,Angular8,我正在尝试使用Angular 8运行一个联系人表单。我已经找到了一个解决方案,但是在将代码改编为我的代码之后,控制台给了我一个错误500。我有点困在这里了。我还得做什么?怎么了?谢谢你提前通知 这是我的上一个版本代码: 但这两个文件是我正在尝试运行的: contact.service.ts import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import {

我正在尝试使用Angular 8运行一个联系人表单。我已经找到了一个解决方案,但是在将代码改编为我的代码之后,控制台给了我一个错误500。我有点困在这里了。我还得做什么?怎么了?谢谢你提前通知

这是我的上一个版本代码:

但这两个文件是我正在尝试运行的:

contact.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Contact } from '../models/contact';


@Injectable({
  providedIn: 'root'
})
export class ContactService {

  baseUrl = 'http://localhost/portfolio/api';
  // baseUrl = '../../../api';
  contact: Contact;

  constructor(private http: HttpClient) { }

  sendEmail() {
    console.log(this.contact);
    this.http.post(`${this.baseUrl}/email.php`, this.contact)
                  .subscribe(resp => console.log(resp), resp => console.log(resp));
  }
}
email.php

<?php 

switch($_SERVER['REQUEST_METHOD']){
case("OPTIONS"): //Allow preflighting to take place.
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Allow-Headers: content-type");
    exit;
case("POST"): //Send the email;
    header("Access-Control-Allow-Origin: *");

    $json = file_get_contents('php://input');

    $params = json_decode($json);

    $name = $params->name;
    $email = $params->email;
    $phone = $params->phone;
    $subject = $params->subject;
    $message = $params->message;

    // the structure of the email itself
    $to = 'my-personal-email@gmail.com';

    $subject = "Portfolio Contact Form with topic: $subject";

    $body = "From:\n\nName: $name";
    $body .= "Email: $email\n\n";
    $body .= "Phone: $phone\n\n";
    $body .= "Message:\n$message";

    $header = "From: $name <$email>";

    if (!mail($to, $subject, $body, $header)) { 
        http_response_code(500); 
    }

    break;
default: //Reject any non POST or OPTIONS requests.
    header("Allow: POST", true, 405);
    exit;
}

?>


ERROR 500是一个一般性错误,任何东西都可能导致该问题,但您的错误不是500,它显示该错误是因为您要求显示ERROR 500,请尝试返回真实错误,而不是http_response_code(500);!或者读取错误日志文件,查看导致问题的原因。在中启用错误报告php@DlkPHP错误日志可能不会显示任何内容,因为最可能的解释是500错误是使用http_response_code()生成的代码,而不是异常的结果。返回500错误而不是真实的错误详细信息是明智的,因为泄漏错误详细信息可能是安全问题。错误详细信息(如果有)应记录到服务器上其他位置的文件中。这很可能是因为
mail()
返回了false(导致
http\u响应\u代码(500);
命令,该命令生成500错误。我不确定这是代码能做的最有用的事情,因为服务器实际上没有崩溃,只是由于某种原因无法发送电子邮件。最好返回一个用户友好的错误消息字符串。同时,要调试电子邮件发送失败的原因,这里有一个好的方法PHP中调试电子邮件问题的ral指南:。如果发现http_response_code()命令不是500错误的根源(您可以简单地进行测试,只需对其进行注释并重新运行代码),则可能意味着PHP代码在某个地方崩溃。您需要找出在哪里崩溃,因此首先要做的是启用错误日志记录(如果尚未启用)-请参阅以获取指南,然后重新测试,然后检查日志。另请参阅其中有一个简单的PHP一般调试指南。