PHP Mail()

Discussion in 'PHP' started by comeoff, 28 Jul 2008.

  1. comeoff

    comeoff New Member

    Joined:
    10 Mar 2008
    Messages:
    89
    Likes Received:
    3
    Reputations:
    0
    Всем привет.
    Кто поможет доделать скриптик с меня плюсики. Вообщем есть скрипт обратной связи с админом. Нужно сделать так, что бы с одного IP можно было отправлять второе сообщение не более чем через час после отправки первого, в противном случае выводить сообщение:
    Вы менее чем час назад уже отправляли письмо через эту форму, если у Вас есть какие то дополнения или вы указали неправильный обратный адрес, то свяжитесь с нами по ICQ. Заранее благодарю всех, кто откликнется.

    Сам скрипт:

    PHP:
    <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>
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,325
    Likes Received:
    1,194
    Reputations:
    252
    Записывый
    $_SERVER['REMOTE_ADDR']:time()
    в файл и проверяй перед отправкой письма
     
  3. DDoSька

    DDoSька Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    317
    Likes Received:
    352
    Reputations:
    18
    Боишься флуда чтоли?Я чего-то не пойму,если я тебя правильно понял,то проще впихнуть капчу.Она есть в разделе "полезные скрипты"
     
  4. bublebuble

    bublebuble Elder - Старейшина

    Joined:
    15 Sep 2007
    Messages:
    102
    Likes Received:
    28
    Reputations:
    0
    полностью согласен, спасёт намного лучше
     
  5. comeoff

    comeoff New Member

    Joined:
    10 Mar 2008
    Messages:
    89
    Likes Received:
    3
    Reputations:
    0
    Блин, и примитивную защиту от флуда прикрутил, и письма отправляет, только блин инфу не всё что нужно передаёт. Посмотрите пожалуйста, в чём косяк? Не передаёт поля Имя и Мэил.

    PHP:
    <?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"
    ;
    ?>
     
    #5 comeoff, 31 Jul 2008
    Last edited: 31 Jul 2008
  6. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    $mailfrom = isset($_POST['mailfrom']) ? $_POST['mailfrom'] : null;
    $name = isset($_POST['name']) ? $_POST['name'] : null;
    $message = isset($_POST['message']) ? $_POST['message'] : null;

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

    На 15 строке провереем существования поля message
    PHP:
    if (isset($_POST['message']))
    На 20 совпдение кода
    PHP:
    if ($_POST['code'] === $realcode)
    Если 2 условия совпало отправляем письмо
    PHP:
    mail("$mailto","$subject","$message","$headers");
    Но сдесь не присвоено значение $message, $headers
    Идем дальше
    В 33 строке
    PHP:
    if (isset($name) && $name == "")
    {
     
    $status "$errors_name";
    }
    если я не ввел имя, у меня $status переприсваиваеться "$errors_name", и это после отправки письма, ошибка после отправки
    mail("$mailto","$subject","$message","$headers");

    Нужно перенести mail в конец проверок и и вывести значения из $_POST массива, а еще лучше переписать все это нафих
     
    #6 Naydav, 31 Jul 2008
    Last edited: 31 Jul 2008
  7. comeoff

    comeoff New Member

    Joined:
    10 Mar 2008
    Messages:
    89
    Likes Received:
    3
    Reputations:
    0
    Блин, не пойму в чём дело. Юзал скрипт обратной связи:
    PHP:
    <?
    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;
    ?>
    Всё работало норм, письма приходили, а щас чёта не работает. В чём косяк?
     
  8. Звeрь

    Звeрь Banned

    Joined:
    25 Feb 2008
    Messages:
    0
    Likes Received:
    126
    Reputations:
    -6
    у меня не работает
    и не работает Введите цифры с картинки* :(
     
    #8 Звeрь, 25 Sep 2008
    Last edited: 25 Sep 2008
Loading...