Настройка PHP в почтовой форме

#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 электронного письма — электронное письмо отправится на любой адрес, на который будет передан из формы $email .

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