Не отправлять по электронной почте


Я пытаюсь создать простую форму электронной почты для клиента и не могу получить <textarea> для отправки в виде сообщения. Я перепробовал все, что нашел до сих пор, и ничего не работает должным образом...
Вот мой код:

<h4>Email Al</h4>
<table>
<form name="contactForm" id="contact" action="send_form_email.php" method="post">
    <tr>
    <td>
    <label>Name:</label>
    <input type="text" name="name">
    </td>
    <td>
    <label>Email Address:</label>
    <input type="email" name="email">
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <label>Website (if Available):</label>
    <input type="text" name="website">
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <label>Your Message:</label></br>
    <textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <input type="submit" value="Send Message">
    </td>
    </tr>
</form>
</table>

Это форма в index.php файл, ниже приведено электронное письмо send-email.php

<?php
  $name = $_POST['name'];
  $email = $_POST['email'];
  $website = $_POST['website'];
  $message = $_POST['information'];

    $email_from = '[email protected]';

    $email_subject = $name . " has sent you a message!";

    $email_body = "You have received a new message from " . $name . " via your website!\n".
                            "Name:\n $name\n".
                            "Email:\n $email\n".
                            "Website:\n $website\n".
                            "Message:\n $message\n".



  $to = "[email protected]";

  $headers = "From: $email_from \r\n";

  $headers .= "Reply-To: $visitor_email \r\n";

  mail($to,$email_subject,$email_body,$headers);


function IsInjected($str)
{
    $injections = array('(\n+)',
           '(\r+)',
           '(\t+)',
           '(%0A+)',
           '(%0D+)',
           '(%08+)',
           '(%09+)'
           );

    $inject = join('|', $injections);
    $inject = "/$inject/i";

    if(preg_match($inject,$str))
    {
      return true;
    }
    else
    {
      return false;
    }
}

if(IsInjected($visitor_email))
{
    echo "Bad email value!";
    exit;
}
?>
<?php
header("Location: /formsubmitted.php"); /* Redirect browser */
exit();
?>

Если у кого-нибудь есть хоть малейшее представление о том, почему это работает неправильно, я бы тоже хотел знать! Это одна из первых php-функций для сообщений/электронной почты, которые я создал сам, как обычно разрабатываю для wordpress, поэтому обычно я просто устанавливаю плагин для своего клиента.

Author: Donald Duck, 2016-01-16

2 answers

Это из-за этой строки: ( Обратитесь к моей сноске)

"Message:\n $message\n".

У вас есть точка вместо (закрывающей) точки с запятой ;

Редактировать: Вам нужно удалить form="contactForm" из <textarea>. После тестирования он не отображался в почте при использовании с ним.

И отчеты об ошибках рассказали бы вам об этом.

Существо:

Уведомление: Неопределенный индекс: информация (строка 8)

И

Примечание: Неопределенная переменная: visitor_email (строки 26 и 55)

В обоих:

$headers .= "Reply-To: $visitor_email \r\n";

И

if(IsInjected($visitor_email))

$visitor_email не определено в вашем коде. Вы должны были использовать $email вместо этого для всех экземпляров $visitor_email.

Тогда у вас есть for="", который, по-видимому, не является допустимым синтаксисом в вашем <textarea...

Это for="" неоднозначно.

Ссылка: https://developer.mozilla.org/en/docs/Web/HTML/Element/textarea

Вы также должны проверить наличие пустых полей с условным !empty().


Сноска:

После более интенсивного тестирования и в отношении точки, о которой я упоминал выше, я должен заявить следующее:

Как ни странно, PHP рассматривает его как допустимый синтаксис, так как в нем есть точка с запятой и включено в конце здесь $to = "[email protected]";

Что это будет делать, так это по-прежнему отправлять почту, НО также включите это в электронное письмо, которое явно не включено в тело переменной $email_body.

Таким образом, первая часть моего ответа была в определенной степени правильной, form="contactForm" будучи здесь главным виновником.

  • Возможно, вы хотели использовать идентификатор id="contactForm" или класс class="contactForm". Оба они действительны для использования и будут включены в вашу почту.

Однако вы не сможете использовать name="contactForm", так как ваш <form> содержит этот именованный атрибут.

  • Оба атрибута name и id (должны быть) уникальными.
 4
Author: Funk Forty Niner, 2016-01-16 18:18:01

Удалить form="contactForm" из <textarea>. Я убрал его. И это начало работать.

Заменить

<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>

До

<textarea for="" name="information" width="100%" rows="10"></textarea>

Или,

Согласно HTML5, вы можете использовать, form id's в input. Итак, вместо form="contactForm" используйте form="contact".

Изменение

<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>

До

<textarea for="" name="information" width="100%" rows="10" form="contact"></textarea>

Для получения дополнительной информации проверьте атрибуты текстовой области

 3
Author: Nana Partykar, 2016-02-09 18:31:10