#php #html #forms
#php #HTML #формы
Вопрос:
Я получил некоторую помощь с формой электронной почты, и я чувствую, что я почти на месте, поскольку скрипт отправляет электронное письмо, но мне нужно несколько настроек, прежде чем я загружу форму. Вот мой код прямо сейчас:
index.html:
<div id="main">
<form method="post" action="mailer.php">
<div id="text">
Please enter your email address.
</div>
<input type="text" name="q" id="search" />
<input type="submit" name="submit" id="submit" value="Go!" />
</form>
</div>
mailer.php:
<?php
$email = addcslashes($_REQUEST['q']) ;
if ($email==FALSE){
echo "You forgot to enter your email";
}
else
mail( "example@gmail.com", "E-Mail entered",
"E-Mail entered: $email");
header( "Location: http://www.example.com/thankyou.html" );
?>
Несколько проблем, с которыми я сталкиваюсь:
Отправляемое электронное письмо фактически не включает введенное электронное письмо, электронное письмо приходит с Apache@ipaddress.ec2.internal и введено тело электронного письма: которое не включает строку электронного письма — есть ли что-то глючное в коде?
Кроме того, мой оператор if, похоже, не работает. Даже если я оставлю поле черным, все равно предполагается, что был отправлен действительный адрес электронной почты.
Наконец, есть ли параметр, который проверяет, указан ли адрес в правильном формате? ie: включает @ the . а домен?
Большое спасибо за любую помощь!
Ответ №1:
Во-первых, вы можете использовать filter_var($email, FILTER_VALIDATE_EMAIL)
для проверки отправленного адреса. Эта функция возвращает, false
если она недействительна. Во-вторых, mail()
требуется 4-й параметр для назначения обратного адреса в заголовке вашего сообщения. Вот пример:
mail(
'to@address.com',
'Subject',
'Message Body',
'From: from@address.com'
)
Что касается вашего оператора if / else, $_POST['q'] == NULL
сначала протестируйте, затем измените $email = addcslashes($_REQUEST['q']);
на $email = str_replace(array(''', '"'), '', $_POST['q']);
— в этом случае нет реальной причины для экранирования символов. Просто удалите их.
Редактировать: вот как должен выглядеть ваш код:
$email = str_replace(array(''', '"'), '', $_POST['q']);
$isValid = filter_var($email, FILTER_VALIDATE_EMAIL);
if ( $_POST['q'] == NULL ) {
echo "You forgot to enter your email";
} elseif ( $isValid == FALSE ) {
echo "Please enter a valid email address";
} else {
mail(
'example@gmail.com', // Your address that you want the message sent to
'Subject',
'Message Body',
'From: ' . $email // The address collected
);
header( "Location: http://www.example.com/thankyou.html" );
}
Имеет ли это немного больше смысла?
Обратите внимание, что из-за современных фильтров спама этот метод может быть доступен не каждому получателю. Создание полезных заголовков электронной почты может быть чем-то вроде искусства, требующего некоторой практики.
Комментарии:
1. да! Еще одна вещь, from@address.com — это тот адрес, на который отправляется электронное письмо?
2. Нет. Это адрес, который будет заменен
Apache@ipaddress.ec2.internal
в строке from электронного письма — электронное письмо отправится на любой адрес, на который будет передан из формы3. Хорошо, итак, есть ли способ написать это так, чтобы адрес электронной почты, который они вводят, отправлялся врагам на определенный адрес? как example@gmail.com ? Я бы хотел, чтобы их ввод электронной почты ($ email) отправлялся на example@gmail.com — извините за мое замешательство
4. Каждый раз, когда кто-то вводит свой адрес электронной почты, на указанный им адрес электронной почты всегда следует отправлять электронное письмо на example@gmail.com
5. Потрясающе! Большое, огромное спасибо! Да, кажется, что каждое электронное письмо попадает в папку «спам», я думаю, что обойти это невозможно
Ответ №2:
Чтобы изменить поле «от», попробуйте что-то вроде этого:
// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "rn";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "rn";
$headers .= 'Cc: birthdayarchive@example.com' . "rn";
$headers .= 'Bcc: birthdaycheck@example.com' . "rn";
// Mail it
mail($to, $subject, $message, $headers);
Что касается вашего оператора if, сначала проверьте переменную $_REQUEST:
if (isempty($_REQUEST['q']) { echo "forgot to enter email"; }
Наконец, вот ссылка на метод проверки адресов электронной почты: http://www.linuxjournal.com/article/9585
Ответ №3:
Попробуйте это для проверки, задан ли адрес электронной почты.
if(isset($_REQUEST['q'])) ..
Что касается «Отправителя электронной почты». Я полагаю, вы ищете заголовок «From».. это можно сделать следующим образом..
$header = "From: Your Name <example@gmail.com>";
mail($to, $subject, $message, $header);
Более подробная информация доступна по адресу http://us3.php.net/manual/en/function.mail.php