PDA

Просмотр полной версии : PHP Mail()


comeoff
28.07.2008, 19:00
Всем привет.
Кто поможет доделать скриптик с меня плюсики. Вообщем есть скрипт обратной связи с админом. Нужно сделать так, что бы с одного IP можно было отправлять второе сообщение не более чем через час после отправки первого, в противном случае выводить сообщение:
Вы менее чем час назад уже отправляли письмо через эту форму, если у Вас есть какие то дополнения или вы указали неправильный обратный адрес, то свяжитесь с нами по ICQ. Заранее благодарю всех, кто откликнется.

Сам скрипт:

<table border="0" borderColor=#ff9933 cellpadding="0" cellspacing="0" width="80%" align=center>
<tr>
<td align=left valign=middle width=50% height="10"><p align="justify" class="h">
<?
$stringmess = "Все поля отмеченные ( * ) являются обязательными.<br> Во избежания разных неприятностей просьба внимательно заполнять все поля формы";
$form_blok = "
<center> <p class=\"text\" align=\"center\"> $stringmess</p> </center>
<form method=\"post\" action=\"$PHP_SELF\">
<p>
<strong class=\"text\">* Ваше имя:</strong><br>
<input type=\"text\" name=\"sender_name\" size=\"30\"></p>
<p>
<strong class=\"text\">* E-mail:</strong><br>
<input type=\"text\" name=\"sender_mail\" size=\"30\"></p>
<strong class=\"text\">* Ваш ICQ</strong><br>
<input type=\"text\" name=\"sender_ICQ\" size=\"30\"></p>
<p><strong class=\"text\">* Сообщение:</strong><br>
<textarea name=\"message\" cols=35 rows=5 wrap=virtual></textarea></p>
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"200\" align=left>
<tr><td align=center valign=top width=100 height=\"5\">
<input class=but4 type=\"reset\" name=\"reset\" value=\"Очистить\"></td>
<td align=center valign=top width=\"100\" height=\"5\">
<input type=\"hidden\" name=\"op\" value=\"ds\">
<input class=but4 type=\"submit\" name=\"submit\" value=\"Послать\"></p>
</td></tr></table>
</form>
</td></tr></table>
";
if ($op != "ds") {
echo "$form_blok";
}
else if ($op == "ds"){
if ($sender_name ==""){
$name_err = "<font color=\"red\" class=\"text\">Вы не заполнили поле <b>ИМЯ</b>!</font><br>";
$send = "no";
}
if ($sender_mail =="") {
$mail_err ="<font color=\"red\" class=\"text\">Вы не заполнили поле <b>E-mail</b>!</font><br>";

$send = "no";
}
if ($sender_ICQ =="") {
$icq_err ="<font color=\"red\" class=\"text\">Вы не заполнили поле <b>ICQ</b>!</font><br>";
$send = "no";
}
else if(!preg_match("/^([a-z,0-9])+\@([a-z,0-9])+(\.([a-z,0-9])+)+$/", $sender_mail))
{
$mail_err1 = "<font color=\"red\" class=\"text\">Вы не правильно заполнили поле <b>E-mail</b>!</font><br>";
$send = "no";
}
if ($message ==""){
$message_err = "<font color=\"red\" class=\"text\">Вы не заполнили поле <b>Сообщение</b>!</font><br>";
$send = "no";
}
if ($send != "no"){
$msg= "Тема письма\n";
$msg .= "Имя отправителя:\n\t\t$sender_name\n";
$msg .= "E-mail отправителя:\n\t\t$sender_mail\n";
$msg .= "Сообщение: \n$sender_ICQ\n\n\n";
$msg .= "Сообщение: \n$message\n\n\n";
$to = "мыльник админа";
$subject = "Тема письма";
$mailheaders .="Reply-To: $mail\n\n";
mail ($to, $subject, $msg, $mailheaders);
$stringmess_ok = "Уважаемый $sender_name, ваше сообщение было успешно отправленно. Администрация свяжется с Вами для уточнения всех деталей.<br>";
echo "<center><p class=\"text\">$stringmess_ok</p><br>";
echo "<a href=\"mess.php\" class=\"leftmenu\">Hазад</a><br></center>";
}
else if ($send == "no") {
echo "<center>";
echo "$name_err";
echo "$mail_err";
echo "$icq_err";
echo "$message_err";
echo "$mail_err1";
echo "<a href=\"mess.php\" class=\"leftmenu\">Вернитесь назад и
повторите попытку</a><br>";
echo "</center>";
}
}
?>
</td>
</tr>
</table>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>

Isis
28.07.2008, 19:03
Записывый
$_SERVER['REMOTE_ADDR']:time()
в файл и проверяй перед отправкой письма

DDoSька
28.07.2008, 20:14
Боишься флуда чтоли?Я чего-то не пойму,если я тебя правильно понял,то проще впихнуть капчу.Она есть в разделе "полезные скрипты"

bublebuble
28.07.2008, 20:21
Боишься флуда чтоли?Я чего-то не пойму,если я тебя правильно понял,то проще впихнуть капчу.Она есть в разделе "полезные скрипты"
полностью согласен, спасёт намного лучше

comeoff
31.07.2008, 13:08
Блин, и примитивную защиту от флуда прикрутил, и письма отправляет, только блин инфу не всё что нужно передаёт. Посмотрите пожалуйста, в чём косяк? Не передаёт поля Имя и Мэил.

<?php

$mailto = "my_mail";
$charset = "windows-1251";
$subject = "Письмо с сайта http://$HTTP_HOST";
$content = "text/plain";
$status=" ";

$errors_name = 'Введите ваше имя';
$errors_mailfrom = 'Введите свой E-mail';
$errors_incorrect = 'Заполните правильно Ваш E-mail';
$errors_message = 'Наберите сообщение!';
$errors_code = 'Неверный код';

if (isset($_POST['message']))
{
$fp = fopen('code.txt','r');
$realcode = fread($fp,4);
fclose($fp);
if ($_POST['code'] === $realcode)
{
mail("$mailto","$subject","$message","$headers");
$send = 'Ваше письмо отправлено!';
$fp = fopen('code.txt','w');
for ($i=1;$i<5;$i++)
fwrite($fp,mt_rand(0,9));
fclose($fp);
}
else
echo "Неверный код!";
}

if (isset($name) && $name == "")
{
$status = "$errors_name";
}
elseif (isset($mailfrom) && $mailfrom == "")
{
$status = "$errors_mailfrom";
}
elseif(isset($mailfrom) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $mailfrom))
{
$status = "$errors_incorrect";

unset($mailfrom);
}
elseif (isset($message) && $message == "")
{
$status = "$errors_message";
}
elseif (!empty($_POST))
{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: $content charset=$charset\r\n";
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
$headers .= "From: \"$name\" <$mailfrom>\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";
unset($name, $mailfrom, $mailto, $subject, $message);
$status = "$send";
}

echo "
<table width=465 border=\"0\">
<tr>
<td height=\"50\" align=\"center\" colspan=\"2\"><font color=\"blue\">$status</font></td>
</tr>
<form method=\"post\">
<tr>
<td width=164><font size=\"2\">Ваше имя* </font></td>
<td width=291><input type=\"text\" name=\"name\"></td>
</tr>
<tr>
<td><font size=\"2\">Ваш e-mail* </font></td>
<td width=291><input type=\"text\" name=\"mailfrom\"></td>
</tr>
<tr>
<td><p align=\"left\"><font size=\"2\">Сообщение* </font></p>&nbsp;</td>
<td width=291><textarea name=\"message\" cols=\"33\" rows=\"10\">Текст сообщения.</textarea></td>
</tr>
<tr>
<td><font size=\"2\">Введите цифры с картинки* </font></td>
<td width=291><input type=\"text\" name=\"code\">
</td>
</tr>
<tr>
<td align=\"left\"></td>
<td width=291 colspan=\"2\"><img src=\"code.php\"></td>
</tr>
<tr>
<td align=\"center\" colspan=\"2\"><input type=\"submit\" value=\"Отправить\" style=\"border: 1px solid #000000\"></td>
</tr>
</form>
</table>\r\n";
?>

Naydav
31.07.2008, 13:35
$mailfrom = isset($_POST['mailfrom']) ? $_POST['mailfrom'] : null;
$name = isset($_POST['name']) ? $_POST['name'] : null;
$message = isset($_POST['message']) ? $_POST['message'] : null;

А вообще логика скрипта кривая

На 15 строке провереем существования поля message
if (isset($_POST['message']))
На 20 совпдение кода
if ($_POST['code'] === $realcode)
Если 2 условия совпало отправляем письмо
mail("$mailto","$subject","$message","$headers");
Но сдесь не присвоено значение $message, $headers
Идем дальше
$send = 'Ваше письмо отправлено!';

В 33 строке
if (isset($name) && $name == "")
{
$status = "$errors_name";
}
если я не ввел имя, у меня $status переприсваиваеться "$errors_name", и это после отправки письма, ошибка после отправки
mail("$mailto","$subject","$message","$headers");

Нужно перенести mail в конец проверок и и вывести значения из $_POST массива, а еще лучше переписать все это нафих

comeoff
25.09.2008, 11:57
Блин, не пойму в чём дело. Юзал скрипт обратной связи:
<?
print"
<FORM method=\"POST\" action=\"zakaz.php?ok=send\">
<P>Ваше Имя:<br>
<INPUT type=\"text\" name=\"Name\" size=30>
</p>
<P>Ваш e-mail:<br>
<INPUT type=\"text\" name=\"Email\" size=30>
</p>
<P>Ваш ICQ:<br>
<INPUT type=\"text\" name=\"ICQ\" size=30>
</p>
<P>Сообщение:<br>
<textarea name=\"Message\" cols=30 rows=5></textarea>
</p>
<input onclick=\"submit\" name=\"image\" type=\"image\" src=\"/image.gif\" style=\"width:100px; height:100px; border:0\" />
</FORM>";

switch($ok) :
default :


break;
case("send") :

if ($Email == "") {print "<script language=JavaScript>window.alert('Введите e-mail!');</script>"; exit;}
if ($ICQ == "") {print "<script language=JavaScript>window.alert('Введите ICQ!');</script>"; exit;}
if ($Message == "") {print "<script language=JavaScript>window.alert('Введите текст!');</script>"; exit;}
if (!eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $Email) and $Email != "") {print "<script language=JavaScript>window.alert('Не правельный E-mail');</script>"; exit;}
$er = 1;

$ip = $REMOTE_ADDR;
$date = date("d.m.Y");

$info = "Name:\t$Name\n";
$info .= "E-Mail:\t$Email\n";
$info .= "E-Mail:\t$ICQ\n";
$info .= "Message:\t$Message\n\n";

$send_to = "мыло доставки";
$subject = "Тема и дата $date";

$headers = "From: Ip адрес: $ip: \n";
$headers .= "Reply-To: $email\n\n";

$send = mail($send_to, $subject, $info, $headers);
if($send == 1)
{

print ("<script language=JavaScript>window.alert('Отправлено $date');</script>");

}
else

print ("<script language=JavaScript>window.alert('Ошибка');</script>");

break;
endswitch;
?>
Всё работало норм, письма приходили, а щас чёта не работает. В чём косяк?

Звeрь
25.09.2008, 23:20
у меня не работает
и не работает Введите цифры с картинки* :(


<?php

$mailto = "my_mail";
$charset = "windows-1251";
$subject = "Письмо с сайта http://$HTTP_HOST";
$content = "text/plain";
$status=" ";

$errors_name = 'Введите ваше имя';
$errors_mailfrom = 'Введите свой E-mail';
$errors_incorrect = 'Заполните правильно Ваш E-mail';
$errors_message = 'Наберите сообщение!';
$errors_code = 'Неверный код';

if (isset($_POST['message']))
{
$fp = fopen('code.txt','r');
$realcode = fread($fp,4);
fclose($fp);
if ($_POST['code'] === $realcode)
{
mail("$mailto","$subject","$message","$headers");
$send = 'Ваше письмо отправлено!';
$fp = fopen('code.txt','w');
for ($i=1;$i<5;$i++)
fwrite($fp,mt_rand(0,9));
fclose($fp);
}
else
echo "Неверный код!";
}

if (isset($name) && $name == "")
{
$status = "$errors_name";
}
elseif (isset($mailfrom) && $mailfrom == "")
{
$status = "$errors_mailfrom";
}
elseif(isset($mailfrom) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $mailfrom))
{
$status = "$errors_incorrect";

unset($mailfrom);
}
elseif (isset($message) && $message == "")
{
$status = "$errors_message";
}
elseif (!empty($_POST))
{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: $content charset=$charset\r\n";
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
$headers .= "From: \"$name\" <$mailfrom>\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";
unset($name, $mailfrom, $mailto, $subject, $message);
$status = "$send";
}

echo "
<table width=465 border=\"0\">
<tr>
<td height=\"50\" align=\"center\" colspan=\"2\"><font color=\"blue\">$status</font></td>
</tr>
<form method=\"post\">
<tr>
<td width=164><font size=\"2\">Ваше имя* </font></td>
<td width=291><input type=\"text\" name=\"name\"></td>
</tr>
<tr>
<td><font size=\"2\">Ваш e-mail* </font></td>
<td width=291><input type=\"text\" name=\"mailfrom\"></td>
</tr>
<tr>
<td><p align=\"left\"><font size=\"2\">Сообщение* </font></p>&nbsp;</td>
<td width=291><textarea name=\"message\" cols=\"33\" rows=\"10\">Текст сообщения.</textarea></td>
</tr>
<tr>
<td><font size=\"2\">Введите цифры с картинки* </font></td>
<td width=291><input type=\"text\" name=\"code\">
</td>
</tr>
<tr>
<td align=\"left\"></td>
<td width=291 colspan=\"2\"><img src=\"code.php\"></td>
</tr>
<tr>
<td align=\"center\" colspan=\"2\"><input type=\"submit\" value=\"Отправить\" style=\"border: 1px solid #000000\"></td>
</tr>
</form>
</table>\r\n";
?>