#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/
Надеюсь, это поможет.