2017-08-27 96 views
2

我不明白为什么我的PHP联系表发送空邮件。 请帮我弄清楚问题所在。PHP联系表发送空邮件

HTML表单代码:

<form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> 
    <div class="form-group"> 
     <input type="text" name="name" class="form-control" required="required" placeholder="Имя"> 
    </div> 
    <div class="form-group"> 
     <input type="phone" name="phone" class="form-control" required="required" placeholder="Номер телефона"> 
    </div> 
    <div class="form-group"> 
     <input type="email" name="email" class="form-control" required="required" placeholder="Email"> 
    </div> 
    <div class="form-group"> 
     <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Ваши пожелания"></textarea> 
    </div>       
    <div class="form-group"> 
    <input type="submit" name="submit" class="btn btn-submit" value="Отправить"> 
    </div> 
</form> 

PHP文件:

<?php 
$name  = @trim(stripslashes($_POST['name'])); 
$from  = @trim(stripslashes($_POST['email'])); 
$phone  = @trim(stripslashes($_POST['phone'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 
$to   = '[email protected]'; 

$headers = array(); 
$headers[] = "MIME-Version: 1.0"; 
$headers[] .= "Content-type: text/plain; charset=iso-8859-1"; 
$headers[] .= "From: {$name} <{$from}>"; 
$headers[] .= "Reply-To: <{$from}>"; 
$headers[] .= "Subject: {$subject}"; 
$headers[] .= "X-Mailer: PHP/".phpversion(); 

mail($to, $subject, $message, $headers); 

die; 

我删除后 '@' 我的错误日志说:

[太阳8月27日21:41: [2017] [警告] [客户端89.169.84.160] mod_fcgid: stderr:PHP注意:未定义索引: /var/www/u0337516/data/www/helloschool.ru/sendemail.php第2行, 引荐:http://helloschool.ru/

JS代码(main.js):

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> Отправка заявки...</p>').fadeIn()); 
      } 
     }).done(function(data){ 
      form_status.html('<p class="text-success">Спасибо, что оставили заявку! Мы свяжемся с вами как можно скорее.</p>').delay(3000).fadeOut(); 
     }); 
    }); 

预先感谢和遗憾的新手问题。

+1

检查后提交表单。 –

+2

使用PHP的邮件功能永远不会取得巨大的成功。节省很多头痛和浪费时间,并开始使用SMTP。通过使用像Swiftmailer这样的预先构建的解决方案来简化它。 –

+0

为什么'@',你得到未定义的通知? – chris85

回答

0

1)您在php代码中有错误。参数headers必须是字符串。

$headers = array(); 
$headers[] = "MIME-Version: 1.0"; 
$headers[] .= "Content-type: text/plain; charset=iso-8859-1"; 
$headers[] .= "From: {$name} <{$from}>"; 
$headers[] .= "Reply-To: <{$from}>"; 
$headers[] .= "Subject: {$subject}"; 
$headers[] .= "X-Mailer: PHP/".phpversion(); 

必须

$headers = ''; 
$headers .= "MIME-Version: 1.0"."\r\n"; 
$headers .= "Content-type: text/plain; charset=iso-8859-1"."\r\n"; 
$headers .= "From: {$name} <{$from}>"."\r\n"; 
$headers .= "Reply-To: <{$from}>"."\r\n"; 
$headers .= "Subject: {$subject}"."\r\n"; 
$headers .= "X-Mailer: PHP/".phpversion(); 

2)你message是俄语,但代码页ISO-8859-1仅支持拉丁字母,你需要西里尔。尝试使用HTML的代码页(我认为它是Windows-1251或UTF-8)。 3)您的javascript中有错误。

$.ajax({ 
     url: form.attr('action')}); 

必须

$.ajax({ 
     url: form.attr('action'), 
     data: form.serialize(), 
     method: "POST"}); 
+0

谢谢,您是对的,但在我做出这些更改后仍然无效。它可能是别的吗?谢谢 –

+0

@StanislavDobryakov我认为这是'codepage'问题。正如我所看到的,你使用俄语作为'message',但'codepage' iso-8859-1只支持英语。尝试选择另一个代码页(Windows-1251,UTF-8)。尝试发送电子邮件英文信息,而不是俄文 –

+0

谢谢,我试过了,没有工作。顺便说一下,我的错误日志:[Sun Aug 27 21:41:14 2017] [warn] [client 89.169.84.160] mod_fcgid:stderr:PHP注意:Undefined index:name in/var/www/u0337516/data/www /helloschool.ru/sendemail.php第2行,referer:http://helloschool.ru/ –