Отправка формы через php — echo работает, но нет электронной почты?

#php

#php

Вопрос:

У меня есть базовая форма и самый базовый файл .php, функция echo работает, но я не получаю электронное письмо. Я знаю, что об этом много спрашивали, но, похоже, я не могу найти ответ на свою проблему. Любая помощь приветствуется. Код смотрите ниже.

Том

HTML:

 <form class="contact" action="send.php" method="post">
  <div class="form-group" id="red-border-focus">
    <div class="row">
      <div class="col">
        <input name="firstname" type="text" class="form-control" 
placeholder="First name">
      </div>
      <div class="col">
        <input name="surname" type="text" class="form-control" 
placeholder="Last name">
      </div>
    </div>
  </div>
  <div class="form-group" id="red-border-focus">
    <div class="row">
      <div class="col">
        <input type="text" name="number" class="form-control" 
placeholder="07000 123456">
      </div>
    </div>
  </div>
  <div class="form-group" id="red-border-focus">
    <div class="row">
      <div class="col">
        <input type="email" name="email" class="form-control" 
placeholder="name@example.com">
      </div>
    </div>
  </div>
  <div class="form-group" id="red-border-focus">
    <div class="row">
      <div class="col">
        <textarea type="textarea" name="feedback" class="form-control" 
placeholder="Comments..." rows="7"></textarea>
      </div>
    </div>
  </div>
  <input type="submit" name="submit" value="Submit">`
</form
  

PHP:

 <?php

$firstname = $_POST['firstname'];
$surname = $_POST['surname'];
$number = $_POST['number'];
$email = $_POST['email'];
$feedback = $_POST['feedback'];

$to="tom.b.flaherty@hotmail.co.uk";
$subject="Automated Email from evotherapycornwall.co.uk";
$body="This is an automated email: n $firstname n $surname n $email nn 
$number nn $feedback";

mail($to, $subject, $body);

echo "Message sent! <a href='index.html'>Click Here</a> To Go Home";


?>
  

Комментарии:

1. проверьте вывод функции mail, например, print(mail($to, $subject, $body)); die; она покажет вам 1, если электронное письмо отправлено успешно, иначе при сбое будет отображаться 0. Также вы можете проверить электронную почту на спам, поскольку иногда она появляется там из-за данных сервера или не прошедшего проверку подлинности SMTP.

2. используете ли вы phpmailer?

Ответ №1:

Вы пробовали добавлять заголовок from в свои электронные письма? http://php.net/manual/en/function.mail.php

 <?php

$firstname = $_POST['firstname'];
$surname = $_POST['surname'];
$number = $_POST['number'];
$email = $_POST['email'];
$feedback = $_POST['feedback'];

$to="tom.b.flaherty@hotmail.co.uk";
$subject="Automated Email from evotherapycornwall.co.uk";
$body="This is an automated email: n $firstname n $surname n $email nn 
$number nn $feedback";
$from="From: webhost@email.com";

mail($to, $subject, $body, $from);

echo "Message sent! <a href='index.html'>Click Here</a> To Go Home";


?>
  

Ответ №2:

Чтобы иметь возможность использовать функцию почты, вы должны настроить SMTP-сервер, такой как sendmail или postfix. Если вы используете Windows, вам следует рассмотреть возможность использования класса PHPMailer и использовать другой почтовый сервер (например, gmail) для ретрансляции.

В вашем коде вы можете проверить, смогла ли функция mail доставить сообщение на ваш локальный почтовый сервер.

 if(mail($to, $subject, $body)){
    echo "Message sent! <a href='index.html'>Click Here</a> To Go Home";
}else{
   echo " Error Sending Email";
}


  

Ответ №3:

Mail PHP требует заголовков, поэтому без не удается отправлять электронные письма, даже если нет ошибок для просмотра на экране, движок Php отказывается доставлять ваше электронное сообщение… Я совершенно уверен, что причиной этого являются отсутствующие заголовки! Смотрите мой пример, чтобы исправить доставку вашего электронного письма…

 <?php
  $mail = "to_your@email.com"; // put here your recipient
  $fmail = "the_sender@email.com";  // put here your sender
  $headers = "From: $fmail" . PHP_EOL;
  $headers .= "Reply-To: $fmail" . PHP_EOL;
  $headers .= "Return-Path: $fmail" . PHP_EOL;
  $headers .= "MIME-Version: 1.0" . PHP_EOL;
  $headers .= "Content-Type: text/plain; Charset="UTF-8"" . PHP_EOL;
  $headers .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
  $subject = "Your Subject Here!";
  $message = "Hello! How are You?" . PHP_EOL;
  if (!@mail($mail, $ubject, $message, $headers, "-f$fmail")) {
    echo "Your Message Cannot Be Sent";
  } else {
    echo "Your Message is Sent with Success";
  }
?>
  

Я использую константу PHP_EOL, потому что она межсерверная и должна нормально работать в любой системе… Если вам нужно, вы можете добавить в начало своего скрипта это…

 //=======================================//
//        Define PHP_EOL if not set      //
//=======================================//
if (!defined('PHP_EOL')) {
  if (strtoupper(substr(PHP_OS,0,3) == 'WIN')) {
    define('PHP_EOL',"rn");
  } elseif (strtoupper(substr(PHP_OS,0,3) == 'MAC')) {
    define('PHP_EOL',"r");
  } elseif (strtoupper(substr(PHP_OS,0,3) == 'DAR')) {
    define('PHP_EOL',"n");
  } else {
    define('PHP_EOL',"n");
  }
}
  

Вы можете прочитать требования в руководстве:http://php.net/manual/en/function.mail.php

Заключительные замечания: если вы работаете под Windows, вы можете рассмотреть возможность использования:

https://www.glob.com.au/sendmail/

https://msmtp.sourceforge.net/

Надеюсь, это поможет.