网络响应 200,但收到错误消息; PHP 发送电子邮件脚本

Posted

技术标签:

【中文标题】网络响应 200,但收到错误消息; PHP 发送电子邮件脚本【英文标题】:Network response 200, but getting Error Message; PHP Send Email Script 【发布时间】:2020-04-22 02:17:22 【问题描述】:

我在某个地方得到了这个 php 代码,一切看起来都还不错,但是每次我尝试发送测试电子邮件时都会收到一条错误消息;但是,网络消息说它确实发送了。请参阅图像和代码 sn-ps。请帮忙。谢谢

PHP 脚本



    session_cache_limiter( 'nocache' );
    header( 'Expires: ' . gmdate( 'r', 0 ) );
    header( 'Content-type: application/json' );

    $to         = 'myemail@gmail.com';  // put your email here

    $email_template = 'simple.html';

    $subject    = strip_tags($_POST['subject']);
    $email       = strip_tags($_POST['email']);
    $phone      = strip_tags($_POST['phone']);
    $name       = strip_tags($_POST['name']);
    $message    = nl2br( htmlspecialchars($_POST['message'], ENT_QUOTES) );
    $result     = array();


    if(empty($name))

        $result = array( 'response' => 'error', 'empty'=>'name', 'message'=>'<strong>Error!</strong>&nbsp; Name is empty.' );
        echo json_encode($result );
        die;
     

    if(empty($email))

        $result = array( 'response' => 'error', 'empty'=>'email', 'message'=>'<strong>Error!</strong>&nbsp; Email is empty.' );
        echo json_encode($result );
        die;
     

    if(empty($message))

         $result = array( 'response' => 'error', 'empty'=>'message', 'message'=>'<strong>Error!</strong>&nbsp; Message body is empty.' );
         echo json_encode($result );
         die;
    



    $headers  = "From: " . $name . ' <' . $email . '>' . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";


    $templateTags =  array(
        'subject' => $subject,
        'email'=>$email,
        'phone'=>$phone,
        'name'=>$name,
        'message'=>$message
        );


    $templateContents = file_get_contents( dirname(__FILE__) . '/email-templates/'.$email_template);

    $contents =  strtr($templateContents, $templateTags);

    if ( mail( $to, $subject, $contents, $headers ) ) 
        $result = array( 'response' => 'success', 'message'=>'<strong>Thank You!</strong>&nbsp; Your email has been delivered.' );
     else 
        $result = array( 'response' => 'error', 'message'=>'<strong>Error!</strong>&nbsp; Cann\'t Send Mail.'  );



    echo json_encode( $result );

    die;

HTML FORM - 这是我的 HTML 代码。我的表格可能有问题吗?但是我认为它是 PHP,或者不匹配的东西。

<!-- Contact Section -->
    <section id="contact" class="contact-section section-padding">
      <div class="container">
        <h2 class="section-title wow fadeInUp">Get in touch</h2>

        <div class="row">
          <div class="col-md-6">
            <div class="contact-form">
              <strong>Send me a message</strong>

              <form name="contact-form" id="contactForm" action="sendemail.php" method="POST">

                <div class="form-group">
                  <label for="name">Name</label>
                  <input type="text" name="name" class="form-control" id="name" required="">
                </div>

                <div class="form-group">
                  <label for="email">Email</label>
                  <input type="email" name="email" class="form-control" id="email" required="">
                </div>

                <div class="form-group">
                  <label for="phone">Phone</label>
                  <input type="phone" name="phone" class="form-control" id="phone" required="">
                </div>

                <div class="form-group">
                  <label for="subject">Subject</label>
                  <input type="text" name="subject" class="form-control" id="subject">
                </div>

                <div class="form-group">
                  <label for="message">Message</label>
                  <textarea name="message" class="form-control" id="message" rows="5" required=""></textarea>
                </div>

                <button type="submit" name="submit" class="btn btn-primary">Send Message</button>
              </form>
            </div><!-- /.contact-form -->
          </div><!-- /.col-md-6 -->

          <div class="col-md-6">
            <div class="row center-xs">
              <div class="col-sm-6">
                <i class="fa fa-map-marker"></i>
                <address>
                  <strong>Address/Street</strong>
                  Find me online,<br>
                  Anywhere, Really<br>
                </address>
              </div>

              <div class="col-sm-6">

              </div>
            </div>

          <div class="row">
            <div class="col-sm-12">
              <!--div class="location-map">
                <div id="mapCanvas" class="map-canvas"></div>
              </div-->
            </div>
          </div>

          </div>
        </div><!-- /.row -->
      </div><!-- /.container -->
    </section><!-- End Contact Section -->

任何有线索的人可能出了什么问题?

【问题讨论】:

您介意在问题中发布错误(不是图片)。由于某种原因无法查看图像。 当然。这里是 response: "error", message: "Error!  Cann't Send Mail." response: "error" message: "Error!&nbsp ; 无法发送邮件。” 我不是 php 专家,但可能需要检查这里的连接操作: $headers = "From:" 。 $名称。 ' ' 。 "\r\n"; 串联没问题。使用 .$email 检查。 " " ."\r\n";仍然为空 【参考方案1】:

您的脚本响应 HTTP 200,错误导致邮件功能不成功。 尝试替换行:

$result = array( 'response' => 'error', 'message'=>'<strong>Error!</strong>&nbsp; Cann\'t Send Mail.'  );

与:

$result = array( 'response' => 'error', 'message'=>'<strong>Error!</strong>&nbsp; Cann\'t Send Mail.', 'reason' => error_get_last()['message'] );

添加到数组中,会显示什么错误

'reason' => error_get_last()['message']

你会看到为什么你的邮件没有发送。

希望对你有帮助:)

【讨论】:

现在我看到这是我的错误消息:似乎表单没有捕获详细信息 :( 响应:“错误”消息:“错误! Cann' t 发送邮件。”原因:空 尝试将原因替换为:'reason' => print_r(error_get_last(), true) 并请查看日志......你可以在这里看到什么...... 我现在明白了:0:真实响应:“错误”消息:“错误! 无法发送邮件。”原因:是的 来自 chrome,这是我一直看到的:[干预] 由于目标被视为被动,因此无法在被动事件侦听器中阻止默认值。 我的意思是服务器日志,chrome日志不响应邮件发送,从服务器日志你可以看到邮件端口是否被禁用。【参考方案2】:

您收到 200 错误的原因是您自己捕获了错误并回显了输出。如果您希望错误为 500,可以尝试在错误中添加此 if/else:

header($_SERVER["SERVER_PROTOCOL"] . ' 500 Internal Server Error', true, 500);  
exit;

为了调试邮件功能本身的错误,这篇文章解释了:

$success = mail('example@example.com', 'My Subject', $message);
if (!$success) 
    $errorMessage = error_get_last()['message'];

How can I get the error message for the mail() function?

【讨论】:

所以我现在得到的错误原因是 Null... 响应:“错误”消息:“错误! 无法发送邮件。”原因:null 可能是我的表单中的某物吗? 嘿,Carol,您在使用共享主机吗?会不会有些端口被屏蔽了? 另外,另一种方法是,您能否检查此 URL 上的选项 2 是否适合您:php.net/manual/en/function.mail.php 是的,我在共享主机上。选项 2 没有给出错误,但仍然看不到任何电子邮件。 感谢@PHPology!实际上通过 SMTP 服务器使用 PHPMailer 让它工作。这也是我的托管公司建议的。

以上是关于网络响应 200,但收到错误消息; PHP 发送电子邮件脚本的主要内容,如果未能解决你的问题,请参考以下文章

Node.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应

okhttp 获取失败响应

Firebase Cloud Message (FCM):尝试从 PHP 向设备发送消息(错误:InvalidRegistration)

正在发送多个改造电话,但有些电话从未收到响应或错误

使用没有错误消息的私人频道时无法从推送者那里获得响应

通过 JSON 网络请求发送 Onesignal/gamethrive 推送