为什么php的mail()函数成功发送邮件但是字段为空?

4

目的地址收到的电子邮件内容为空白,这是什么原因呢?

我的mail()使用如下:

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

你为什么在邮件函数前面加了一个@符号?此外,当你说空白字段时,是指整个邮件/正文为空,还是你仍然收到邮件中硬编码的文本? - Epodax
可能是编码问题?$_POST 变量的编码是什么? - 2kai
尝试使用 echo $body; exit; 并检查是否获取到值。 - Narendrasingh Sisodia
你漏了 headers。尝试包含这个 $headers.= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=iso-8859-1\n"; $headers.= "X-Priority: 1\r\n"; 并检查。 - Krishna38
1
开启错误报告,并且不要用 @ 抑制错误信息。 - Karoly Horvath
哪些字段是空的?您在标记中没有设置“主题”... - MarcoS
4个回答

3

$subject = @trim(stripslashes($_POST['subject'])); 但是你的表单没有主题,你需要添加它。
不要使用@来抑制错误,因为你永远不会知道代码发生了什么。


0

嗨,我在000webhost应用程序上遇到了同样的问题。我通过两个调整来解决它: 第一:为表单值添加变量名称= $(“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"、"email"和"XX"


0

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

<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()添加到脚本中,现在邮件正常工作了...

谢谢大家....


-1
    $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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接