2016-07-19 7 views
2

У меня есть сайт, я не про, но уже закончен, кроме проблемы sendmail. Когда я нажимаю кнопку «Отправить сейчас», на экране появляется сообщение «спасибо за ваше сообщение», но я не получаю никакого сообщения электронной почты.Как исправить sendmail.php не работает?

  • Я проверил коробку спам это не есть слишком

  • Я проверил phpinfo SMTP порт открыт и 25

  • Я проверил phpinfo senmail_path/USR/SBIN/Sendmail -t -i

  • Я звоню и отправляю электронное письмо хостинговой компании, они сказали, что все в порядке, серверная сторона проверяет ваш скрипт sendmail.

здесь файл sendmail.php;

<?php 
$name  = @trim(stripslashes($_POST['name'])); 
$from  = @trim(stripslashes($_POST['email'])); 
$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; 

Мне нужна помощь, чтобы узнать, в чем проблема. Я проверил другие вопросы, и как-то это не помогло мне. Спасибо заранее.

P.S. Я не уверен, что кому-то понадобится код html формы, но я думаю, что это тоже будет полезно добавить.

<div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms"> 
     <div class="row"> 
     <div class="col-sm-6"> 
      <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> 
      <div class="row wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms"> 
       <div class="col-sm-6"> 
       <div class="form-group"> 
        <input type="text" name="name" class="form-control" placeholder="Name" required> 
       </div> 
       </div> 
       <div class="col-sm-6"> 
       <div class="form-group"> 
        <input type="email" name="email" class="form-control" placeholder="Email Address" required> 
       </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <input type="text" name="subject" class="form-control" placeholder="Subject" required> 
      </div> 
      <div class="form-group"> 
       <textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required></textarea> 
      </div>       
      <div class="form-group"> 
       <button type="submit" class="btn-submit">Send Now</button> 
      </div> 
      </form> 
     </div> 
+0

Что говорят журналы? –

+0

'mail ($ to, $ subject, $ message, $ headers)' помещает это внутри 'if() {}' и проверяет, возвращает ли он FALSE. –

+0

А как насчет проверки результата 'mail()'? 'var_dump (mail ..)' Если он сообщает, что вы не отправили файл, проблема, вероятно, будет в конфигурации вашего сервера. – Christian

ответ

1

Неправильный параметр $headers; он должен быть string не array. От PHP manual:

Строка, которая будет вставлена ​​в конец заголовка электронной почты.

Обычно это используется для добавления дополнительных заголовков (From, Cc и Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (\ r \ n). Если для составления этого заголовка используются внешние данные, данные следует дезинфицировать, чтобы не вводить нежелательные заголовки.

Вы должны быть в состоянии решить эту проблему следующим образом: функция

mail($to, $subject, $message, implode("\r\n", $headers)); 
+0

Привет timcluttonI просто получаю e-mail, но без сообщения темы и имени отправителя. Пустой e-mail. Что это может быть неправильно? – Itrader

+0

Вам нужно будет отладить его самостоятельно, проверив содержимое переменных перед вызовом 'mail'. Используйте что-то вроде 'var_dump ($ to, $ subject, $ message, implode (" \ r \ n ", $ headers));' для просмотра содержимого всех переменных. – timclutton

0

почты из PHP сложно использовать, если Sendmail не правильно настроить. Вместо этого я использовал https://github.com/PHPMailer/PHPMailer (не волнуйтесь, вам нужны только 2 файла от class.phpmailer.php и class.smtp.php).

пример из send_mail функции на основе PHPMailer

function send_mail($subject, $body, $altbody, $to, $name, $attach = '') 
{ 
$mail = new PHPMailer(true); 
$mail->IsHTML(true); 
$mail->IsSMTP(); 
$mail->CharSet = 'text/html; charset=UTF-8;'; 

$mail->Host  = "some.external.smtp.server"; // SMTP server example 
$mail->SMTPDebug = 0;      // enables SMTP debug information (for testing) 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->Port  = port_for_external_smtp;      // set the SMTP port for the GMAIL server 
$mail->Username = "username_for_external_smtp_server";  // SMTP account username example 
$mail->Password = "pass";    // SMTP account password example 

try 
    { 
     $mail->setFrom('address', 'name'); 
     $mail->addReplyTo($to, $name); 
     $mail->addAddress($to, $name); 
     $mail->Subject = $subject; 
     $mail->Body = $body; 
     $mail->isHTML(true); 
     $mail->AltBody = $altbody; // altbody if for text only mail 
     if (!($attach == '')) 
     { 
       $mail->AddAttachment($attach); // attachment 
      } 
     $mail->send(); 
     } 
catch (phpmailerException $e) 
    { 
     echo $e->errorMessage(); //Pretty error messages from PHPMailer 
     } 
catch (Exception $e) 
    { 
     echo $e->getMessage(); //Boring error messages from anything else! 
     } 
} 
+0

Alex спасибо за ответ, но уже я волнуюсь) Я не программист и очень возможен после этого. Мне больше не нужно будет слышать о php. Просто мне нужно выяснить простой способ его исправить. – Itrader