【问题标题】:Why is php's mail() function successfully sending mail but with blank fields?为什么 php 的 mail() 函数成功发送邮件但字段为空白?
【发布时间】:2015-04-23 06:46:39
【问题描述】:

电子邮件正在到达目标地址,但字段为空白。是什么原因?

我对@9​​87654321@的使用如下:

<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Email sent!'
);

$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 = 'info@siteaddress.com';

$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; 
?>

HTML 的形式是:

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" role="form">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<input type="text" class="form-control" required placeholder="Name" name="name" id="name">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input type="text" class="form-control" required placeholder="Email address" name="email" id="email">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<textarea name="message" id="message" required class="form-control" rows="8" placeholder="Message" name="message" id="message"></textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-danger btn-lg">Send Message</button>
</div>
</div>
</div>
</form>

【问题讨论】:

  • 为什么在邮件功能前面加了@? - 另外,当您说空白字段时,是整个邮件/正文都为空,还是您仍然收到邮件中的硬编码文本?
  • 可能是编码? $_POST 变量的编码是什么?
  • 尝试echo $body; exit;并检查您是否获得了价值。
  • 你错过了headers。尝试包含此 ` $headers.= "MIME-Version: 1.0\r\n"; $headers .= "内容类型: text/html; charset=iso-8859-1\n"; $headers.= "X 优先级:1\r\n"; ` 并检查
  • 开启错误报告,不要使用@抑制错误消息

标签: php email error-handling sendmail


【解决方案1】:

$subject = @trim(stripslashes($_POST['subject'])); 但您的表单没有主题,您应该添加它。
不要用 @ 来隐藏错误,因为你永远不会知道你的代码到底发生了什么。

【讨论】:

    【解决方案2】:

    终于得到了答案....问题是我的表单没有发布任何内容,因为缺少以下脚本

    <script>
    var form = $('.contact-form');
    form.submit(function () {
        $this = $(this);
        $.post($(this).attr('action'),$(this).serialize(), function(data) {
            $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
        },'json');
        return false;
    });
    </script>
    

    我已将 $(this).serialize() 添加到脚本中,现在邮件工作正常...

    谢谢大家....

    【讨论】:

      【解决方案3】:

      您好,我在 000webhost 应用上遇到了同样的问题。我用两种情绪来解决这个问题 第一个: 添加 var name = $("input#name").val();用于表单值并输入 ajax 函数名称:名称,用于表单值

      var form = $('#main-contact-form');
      form.submit(function(event){
          event.preventDefault();     
              var name = $("input#name").val();
              var email = $("input#email").val();
              var subject = $("input#subject").val();
              var message = $("textarea#message").val();
      
          var form_status = $('<div class="form_status"></div>');
          $.ajax({
               url: $(this).attr('action'),
                  type: "POST",
                  data: {
                      name: name,
                      email: email,
                      subject: subject,
                      message: message,
                  },
                  cache: false,
      
              beforeSend: function(){
                  form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email enviandose</p>').fadeIn() );
      
              }
          }).done(function(data){
              form_status.html('<p class="text-success"> Gracias por la consulta, a la brevedad estaremos respondiendo</p>').delay(3000).fadeOut();
                   //clear all fields
                  $('#main-contact-form').trigger("reset");
          });
      });  
      

      第二个:在我的例子中,标签 id"name" id"email" id"XX" 在 mi Form 中

      【讨论】:

        【解决方案4】:
            $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
        
             //to Replace This
        
            $header  .= 'MIME-Version: 1.0' . "\r\n";
            $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        
            $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>',,$header);
         if( $success == true )  
                       { 
        //success Message
        }
        else{
        //Error Message
        }
        

        【讨论】:

          猜你喜欢
          • 2020-03-08
          • 1970-01-01
          • 2016-02-18
          • 2011-06-05
          • 2014-07-14
          • 1970-01-01
          • 2015-11-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多