【问题标题】:I am getting blank email from php and js我收到来自 php 和 js 的空白电子邮件
【发布时间】:2016-12-10 16:24:58
【问题描述】:

请帮助我解码真正的问题是什么。问题是我一直收到一封空白的电子邮件,尽管我对这段代码进行了所有的调整和研究。下面是我的 html、javascript (ajax) 和 php 代码。

HTML 代码:名为contact.html 的文件

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
    <div class="col-sm-5 col-sm-offset-1">
        <div class="form-group">
            <label>Name *</label>
            <input type="text" name="name" class="form-control" required="required">
        </div>
        <div class="form-group">
            <label>Email *</label>
            <input type="email" name="email" class="form-control" required="required">
        </div>
        <div class="form-group">
            <label>Phone</label>
            <input type="number" class="form-control">
        </div>
        <div class="form-group">
            <label>Company Name</label>
            <input type="text" class="form-control">
        </div>                        
    </div>
    <div class="col-sm-5">
        <div class="form-group">
            <label>Subject *</label>
            <input type="text" name="subject" class="form-control" required="required">
        </div>
        <div class="form-group">
            <label>Message *</label>
            <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
        </div>                        
        <div class="form-group">
            <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
        </div>
    </div>
</form> 

AJAX 代码:名为 main.js 的文件

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $(this).attr('action'),

        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
    });
});

PHP 代码:名为 sendemail.php 的文件

<?php
header('Content-type: application/json');
$status = array(
    'type'=>'success',
    'message'=>'Thank you for contact us. As early as possible  we will contact you '
);

$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

$email_from = $email;
$email_to = 'email@email.com';//replace with your email

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

echo json_encode($status);
die;
?>

我不断收到如下所示的空白电子邮件

Name:

Email: Blank

Phone: Blank

Subject: Blank

Message: Blank

【问题讨论】:

  • 请格式化您的 HTML,因为它很难像您发布的那样阅读。
  • Erabor,MatVP 的回答建议删除“@”符号以显示错误,我同意这一点,试一试(全部删除)。

标签: php html ajax email


【解决方案1】:

您是否尝试过在脚本末尾不使用 die()?我想你可能杀掉你的页面太快了。

也尝试像这样创建一个捕获:

if (!mail(...)) 
{
   // Reschedule for later try or panic appropriately!
}

此外,您在 mail(); 之前使用 @ 来抑制警告; 尝试删除@。

编辑:另外,尝试删除修剪。

【讨论】:

    【解决方案2】:

    你在调用ajax时没有设置数据,可能是你的问题。

    【讨论】:

    • 我测试了代码,数据被ajax正确发送并被PHP正确接收。我找不到电子邮件为空白的原因。
    【解决方案3】:

    当我测试您的代码时,我看到尽管您在表单属性中将方法定义为 POST,但仍会触发 GET 请求。 (也许这就是为什么 jQuery 默认使用 GET ......)。所以 $_POST['name'] 是空的,因为参数在 $_GET['name'] 中。

    我在提交表单时看不到请求参数。 (也许这就是未设置“数据”属性的原因..)

    请尝试使用这些来完成 $.ajax:

    method: 'POST'
    data: $(this).serialize()
    

    【讨论】:

      【解决方案4】:

      非常感谢你们所有人(@Mateusz Klimentowicz,@Mat VP,@Jose Manuel Abarca Rodríguez,@Vladimir Nu)。我实际上是按照您的指示进行的,并最终更正了 JS 文件和 PHP 文件,如下所示:

      JS 文件:

      // Contact form
      
      var form = $('#main-contact-form');
      form.submit(function(event){
          event.preventDefault();
          // Serialize the form data.
          var formData = $(form).serialize();
          var form_status = $('<div class="form_status"></div>');
          $.ajax({
              type: 'POST',
              url: $(this).attr('action'),
              data: formData,
              beforeSend: function(){
                  form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
              }
          }).done(function(data){
              form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
          });
      });
      

      虽然 PHP 代码变成了下面这样:

      <?php
      
          $status = array(
          'type'=>'success',
          'message'=>'Thank you for contacting us. As soon as possible  we will contact you!'
      );
      
          $fail = array(
          'type'=>'fail',
          'message'=>'Please try again. Your mail could not be delivered!'
      );  
      
      $name = @trim(stripslashes($_POST['name'])); 
      $email = @trim(stripslashes($_POST['email'])); 
      $subject = @trim(stripslashes($_POST['subject'])); 
      $message = @trim(stripslashes($_POST['message'])); 
      
      
      $email_from = $email;
      $email_to = 'email@mail.com';//replace with your email
      
      $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
      
      $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
      
      header('Content-type: application/json');
      
      if($success){
          echo json_encode($status);
      }
      else{
          echo json_encode($fail);
      }
      ?>
      

      在使用如下所述的代码后,我最终没有收到任何空白页电子邮件。电子邮件现在与它的内容一起被传递。非常感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多