Форма отправки письма.

Тема в разделе "Как сделать...", создана пользователем rijy, 5 май 2009.

Статус темы:
Закрыта.
  1. rijy

    rijy

    Регистр.:
    3 ноя 2007
    Сообщения:
    249
    Симпатии:
    82
    Здравствуйте уважаемые!
    Возникли траблы с формой отправки сообщения с сайта. Т.е. человек вводит в форму все необходимые данные, нажимает "Отправить" и я на свое мыло получаю письмо с введенными данными.
    Нашел такой скрипт с необходимым функционалом, однако он наотрез отказывается отправлять письма(
    Пробовал с разных хостингов, на разные мейлы - результат негативный(
    Буду благодарен за любые советы.
    Вот код самой формы:
    Код:
    <form action="action_mail.php" method="post" enctype="multipart/form-data">
    <center>Ваш E-mail:</center><input type="text" name="from"><br>
    <center>Тема:</center><input type="text" name="subj"><br>
    Сообщение:<br><textarea cols="50" rows="10" name="text"></textarea><br>
    Файл: <input type="file" name="file"><br>
    <input type="submit" name="submit" value="Отправить">
    </form>
    Вот код скрипта отправки:
    Код:
    <?
    //Функция проверки переменной
    function html_filter($str) {
        $result = HTMLSpecialChars($str);
        return $result;}
    
    //Функция проверки e-mail
    function isEmail($email){
        if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]+$", $email)){return TRUE;}else{return FALSE;}}
    
    //Функция отправки письма с аттачем
    $to = ('моемыло@gmail.com');
    function XMail($from, $to, $subj, $text, $filename, $file)
    {
    $f         = fopen($file,"rb");
    $un        = strtoupper(uniqid(time()));
    $head      = "From: $from\n";
    $head     .= "To: $to\n";
    $head     .= "Subject: $subj\n";
    $head     .= "X-Mailer: PHPMail Tool\n";
    $head     .= "Reply-To: $from\n";
    $head     .= "Mime-Version: 1.0\n";
    $head     .= "Content-Type:multipart/mixed;";
    $head     .= "boundary=\"----------".$un."\"\n\n";
    $zag       = "------------".$un."\nContent-Type:text/html;\n";
    $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
    $zag      .= "------------".$un."\n";
    $zag      .= "Content-Type: application/octet-stream;";
    $zag      .= "name=\"".basename($filename)."\"\n";
    $zag      .= "Content-Transfer-Encoding:base64\n";
    $zag      .= "Content-Disposition:attachment;";
    $zag      .= "filename=\"".basename($filename)."\"\n\n";
    $zag      .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
    if (!@mail("$to", "$subj", $zag, $head))
    return 0;
    else
    return 1;
    }
    
    
    //Получаем данные из формы
    if(isset($submit)):
    //Проверяем полученные из формы данные
    $from = trim(html_filter($from));
    $to = trim(html_filter($to));
    $subj = trim(html_filter($subj));
    $text = trim(html_filter($text));
    $text = str_replace("\n", "<br>\n", $text);
    $filename = trim(html_filter($file_name));
    //Если прикреплен файл
    if($filename!="" and $file_size>0):
        if(XMail($from, $to, $subj, $text, $filename, $file)==1){header("Location:?send=ok");}
    endif;
    //Если Не прикреплен файл
    if($filename=="" or $file_size==0):
        if(EMail($from, $to, $subj, $text)==1){header("Location:?send=ok");}
    endif;
    endif;
    ?> 
    Спасибо.
     
  2. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    Сразу бросается в глаза ошибка: здесь должна вызываться XMail, а не EMail.
     
    rijy нравится это.
  3. rijy

    rijy

    Регистр.:
    3 ноя 2007
    Сообщения:
    249
    Симпатии:
    82
    подправил.. все равно не хочет работать(
    может быть кто-нибудь знает рабочий аналог с похожим функционалом?
    главное чтоб файл можно было приложить..
     
  4. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    подправил синтаксис, добавил чтение переменных из $_POST. Попробуй.

    PHP:
    <?
    $to 'jik@microsoft.com';

    $submit $_POST['submit'];
    $from $_POST['from'];
    $subj $_POST['subj'];
    $text$_POST['text'];

    $file_name $_FILES['file']['name'];
    $tmp_name $_FILES['file']['tmp_name'];
    $file_size intval($_FILES['file']['size']);

    //Функция проверки переменной
    function html_filter($str) {
      
    $result HTMLSpecialChars($str);
      return 
    $result;
    }

    //Функция проверки e-mail
    function isEmail($email){
      if (
    eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]+$"$email)) {
        return 
    TRUE;
      } else {
        return 
    FALSE;
      }
    }

    //Функция отправки письма с аттачем
    function XMail($from$to$subj$text$filename$file)
    {
      
    $f         fopen($file,"rb");
      
    $un        strtoupper(uniqid(time()));
      
    $head      "From: $from\n";
      
    $head     .= "To: $to\n";
      
    $head     .= "Subject: $subj\n";
      
    $head     .= "X-Mailer: PHPMail Tool\n";
      
    $head     .= "Reply-To: $from\n";
      
    $head     .= "Mime-Version: 1.0\n";
      
    $head     .= "Content-Type:multipart/mixed;";
      
    $head     .= "boundary=\"----------".$un."\"\n\n";
      
    $zag       "------------".$un."\nContent-Type:text/html;\n";
      
    $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
      
    $zag      .= "------------".$un."\n";
      
    $zag      .= "Content-Type: application/octet-stream;";
      
    $zag      .= "name=\"".basename($filename)."\"\n";
      
    $zag      .= "Content-Transfer-Encoding:base64\n";
      
    $zag      .= "Content-Disposition:attachment;";
      
    $zag      .= "filename=\"".basename($filename)."\"\n\n";
      
    $zag      .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
      if (
    mail("$to""$subj"$zag$head)) {
        return 
    true;
      } else {
        return 
    false;
      }
    }


    //Получаем данные из формы
    if(isset($submit)) {
      
    //Проверяем полученные из формы данные
      
    $from trim(html_filter($from));
      
    $to trim(html_filter($to));
      
    $subj trim(html_filter($subj));
      
    $text trim(html_filter($text));
      
    $text str_replace("\n""<br>\n"$text);
      
    $filename trim(html_filter($file_name));
      
    $tmpname trim(html_filter($tmp_name));
      
    //Если прикреплен файл
      
    if($filename!="" and $file_size>0) {
        if(
    XMail($from$to$subj$text$filename$tmpname)) {
          echo 
    "xmail() ok<br>";
        } else {
          echo 
    "xmail() failed<br>";
        }
      } else {
        
    //Если Не прикреплен файл
        
    echo "before mail() to=$to subj=$subj text=$text<br>";
        if(
    mail($to$subj$text)) {
          echo 
    "mail() ok<br>";
        } else {
          echo 
    "mail() failed<br>";
        }
      }
    }
    ?>
     
Статус темы:
Закрыта.