Настройка PHP на почтовой форме - PullRequest
1 голос
/ 06 апреля 2011

Мне помогли с формой электронной почты, и я чувствую, что я почти на месте, так как скрипт отправляет электронное письмо, но мне нужно несколько настроек, прежде чем я отправлю форму. Вот мой код прямо сейчас:

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, похоже, не работает. Даже если я оставлю поле черным, это все равно предполагает, что действительный адрес электронной почты был отправлен.

Наконец, есть ли параметр, который определяет, находится ли адрес в правильном формате? То есть: включает в себя @. а домен?

Большое спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Во-первых, вы можете использовать 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 голос
/ 06 апреля 2011

Чтобы изменить поле «from», попробуйте что-то вроде этого:

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

Что касается вашего оператора if, сначала проверьте переменную $ _REQUEST:

if (isempty($_REQUEST['q']) { echo "forgot to enter email"; }

Наконец, вот ссылка на метод проверки адресов электронной почты: http://www.linuxjournal.com/article/9585

0 голосов
/ 06 апреля 2011

Попробуйте проверить, настроен ли адрес электронной почты.

if(isset($_REQUEST['q'])) .. 

Насколько "Email Sender".Я полагаю, что вы ищете заголовок «От», который можно сделать следующим образом.

$header = "From: Your Name <example@gmail.com>"; 
mail($to, $subject, $message, $header); 

Более подробная информация доступна на http://us3.php.net/manual/en/function.mail.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...