В настоящее время я изучаю php для класса веб-интерфейса, и одним из наших назначений является создание базовой формы для отправки электронной почты. Затем мы должны иметь возможность отправить образец этой формы по электронной почте через html. Я хочу сделать это, показывая ввод, который был введен при отправке электронного письма. У меня есть большая часть работы, я просто не могу получить переменную $ subject, чтобы полностью заполнить образец. Он будет показывать только одно слово и пропустить все остальные после первого символа пробела. (То же самое относится к переменной $ from variable, однако, как правило, это адрес электронной почты и, следовательно, не является основной проблемой)
Например, если я отправлю электронное письмо с темой «Это тест», когда я получаю электронное письмо в своем почтовом ящике, я увижу полный текст «Это тест» в строке темы моей электронной почты. Но когда я сам открываю письмо и смотрю на сгенерированную форму, я увижу только «Это» как заполненный предмет.
Я использую тег input, type = "text", чтобы ввести тему, и я полагаю, что это часть причины. Я могу решить проблему, используя тег textarea, но это не является обычным явлением и, похоже, преследует цель упражнения. Любая помощь приветствуется. Благодаря!
Вот мой код: (Первый блок – это просто функция для создания формы.)
function createForm() //create form upon page load { echo '<form method="post">' . '<br />'; echo '<fieldset>' . '<br />'; echo '<legend><p>Heading</p></legend>' . '<br />'; echo 'To: <input name="to" type="text" />' . '<br />'; echo 'From: <input name="from" type="text" />' . '<br />'; echo 'Subject: <input name="subject" type="text" />' . '<br />'; echo '</fieldset>' . '<br />'; echo '<fieldset>' . '<br />'; echo '<legend><p>Content</p></legend>' . '<br />'; echo 'Message: <textarea name="message" cols="30" rows="10"></textarea>' . '<br />'; echo '<input name="send" type="submit" />' . '<br />'; echo '</fieldset>' . '<br />'; echo '</form>'; }
И фактический код отправки электронной почты:
if(isset($_REQUEST['to'])) //send email { $to = $_REQUEST['to']; $subject = $_REQUEST['subject']; $from = $_REQUEST['from']; $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= 'Content-Type: text/html; charset=iso-8859-1' . "\r\n"; $headers .= "From: $from" . "\r\n"; $headers .= "Reply-To: $from" . "\r\n"; $headers .= "Subject: $subject" . "\r\n"; $headers .= "X-Mailer: PHP/".phpversion() . "\r\n"; //html message $message = ' <html> <body> <form> <fieldset> <legend>Headings</legend> To: <input type="text" name="to" value=' . $_REQUEST['to'] . ' /><br /> From: <input type="text" name="from" value=' . $_REQUEST['from'] . ' /><br /> Subject: <input type="text" name="subject" value=' . $_REQUEST['subject'] . ' /> </fieldset> <fieldset> <legend>Content</legend> Message: <textarea name="message" cols="30" rows="10">' . $_REQUEST['message'] . '</textarea><br /> <input type="submit" name="send" /> </fieldset> </form> </body> </html>'; mail($to,$subject,$message,$from,$headers); echo "Message sent, thank you. <br />"; echo '<a href="email.php">Return</a>'; } else { createForm(); //create form if no $to set. }
HTML-интерпретатор в почтовой программе просматривает элементы ввода и видит атрибут value
за которым следует одно некорректное слово. Затем он видит кучу других атрибутов без значений. Правильно укажите значение в первую очередь. И санировать тоже; вы не хотите, чтобы ваши клиенты были взломаны из-за электронного письма, которое было отправлено из вашей системы.