Я пробовал массу разных способов решить эту проблему, когда я пытаюсь отправить электронное письмо, если я заполняю значение «имя» только одним словом, через которое оно проходит, и электронное письмо отправляется. Но если значение «имя» содержит более 1 слова, появляется сообщение об ошибке.
<?php
if ( !isset($_POST['name']) || empty($_POST['name']) ||
!isset($_POST['phone']) || empty($_POST['phone']) ||
!isset($_POST['email']) || empty($_POST['email']) ||
!isset($_POST['asunto']) || empty($_POST['asunto']) ||
!isset($_POST['mensaje']) || empty($_POST['mensaje'])
){
echo '<p>Please fill in all fields</p>';
}else{
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$asunto = $_POST['asunto'];
$mensaje = $_POST['mensaje'];
$to = '[email protected]';
$from = 'From:' . $name . '';
$subject = 'Mensaje de ' . $name . '';
$message = 'Nombre: ' . $name . '<br/><br/>
Telefono: ' . $phone . '<br/><br/>
Correo electronico: ' . $email . '<br/><br/>
Asunto: ' . $asunto . '<br/><br/>
Mensaje: ' . nl2br($mensaje) . '<br/>';
if (mail ($to, $subject, $message, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ты точно не хочешь $from = 'From: ' . $email . '';
@RiggsFolly Для чего нужна пустая строка в конце?
@kojow7 Насколько я могу судить, нет. Но я не хотел пугать ОП большим изменением, чем необходимо.
Спасибо обоим за ваши комментарии.
Я все еще выясняю, почему это не работает, теперь переменная электронная почта проходит, только если я заполняю ее 1 символом.






Попробуй это:
$from = 'From: ' . $name. ' <' . $email . '>' . "\r\n" . 'X-Mailer: PHP';
Этот заголовок действителен, но сервер получателя может заблокировать такой «простой» заголовок электронной почты из-за спама. Особенно, если «от электронной почты» имеет домен, отличный от вашего домена sendmail (отправителя).
Здравствуйте, RAF, код работает, когда я заполняю форму только одним символом, и электронное письмо отправляется, но если я пытаюсь ввести настоящее имя, адрес электронной почты, тему и т. д., появляется ошибка.
RiggsFolly был прав, в следующей строке была ошибка
Недействителен
$from = 'From:' . $name . '';Действительный
$from = 'From: ' . $email . '';
Это потому, что "более одного слова" не является допустимым список почтовых ящиков.