не приходят письма mail()

Тема в разделе "Как сделать...", создана пользователем E-body, 21 май 2011.

  1. E-body

    E-body

    Регистр.:
    6 сен 2007
    Сообщения:
    980
    Симпатии:
    315
    написал (на основе готовой) контактную форму заказов для одного сайта
    PHP:
    <?php        
    $err
    =0;
    $key='7687GYgjuyrrer';

    // Очиста ПОСТ от всякой хуйни
    $email strip_tags(stripslashes(trim(substr($_POST['email'],0,40))));
    $tel strip_tags(stripslashes(trim($_POST['tel'])));
    $name strip_tags(stripslashes(trim(substr($_POST['name'],0,60))));
    $adres strip_tags(stripslashes(trim(substr($_POST['adres'],0,40))));
    $sfera strip_tags(stripslashes(trim(substr($_POST['sfera'],0,3000))));
    //$cel = trim($_POST['cel']);
    $zadaci strip_tags(stripslashes(trim(substr($_POST['zadaci'],0,3000))));
    $message strip_tags(stripslashes(trim(substr($_POST['message'],0,3000))));
    $rnd2 trim($_POST['rnd2']);
    $cap strip_tags(stripslashes(trim($_POST['cap'])));
    //$site = trim($_POST['site']);
    $hash2 trim($_POST['hash2']);

    $hash3=md5($rnd2.$key);


    if (@
    $_REQUEST['submit'])
    {
    if(
    $hash3!=$hash2) {echo"<font color=red><br>Oшибка</font>";$err++;}
    if(
    $cap!=$rnd2) {echo"<font color=red><br>Число ввели не правильно</font>";$err++;}
    if(empty(
    $email) or empty($tel) or empty($name) or empty($sfera) or empty($zadaci) or empty($message)) {echo"<tr><td colspan='2'><font color=red><br>Не все поля заполнены</font></td></tr>";$err++;}
    if(
    $err==0){
    /* не реализовано изза ненадобности
    if ($site=='ya') $site='яндекс';    
    if ($site=='ra') $site='рамблер';    
    if ($site=='go') $site='google';    
    if ($site=='ba') $site='баннер на другом сайте';    
    if ($site=='na') $site='наружная реклама';    
    if ($site=='zn') $site='от знакомых';    */

    $headers"Content-type: text/html; charset=windows-1251\r\n";
    $headers.= "Content-Transfer-Encoding: 8bit\r\n"
           
            
    mail("test@moi-mail.com""=?Windows-1251?B?".base64_encode("$name")."?=""ФИО: $name \n Сообщение: $message \n email: $email \n телефон: $tel \n Адрес сайта: $adres \n Сфера сайта: $sfera \n Сайт для определенных задач: $zadaci"$headers ); 
            echo
    "Ваше сообщение отправлено. Мы свяжемся с Вами в указанное Вами время.";}
            }
            
    ?>


    <?php

    $rnd
    =mt_rand(0,99999);

    $hash=md5($rnd.$key);

    echo
    "<form method='post'>"
        
    ."<input type='hidden' name='posting' value='1'>"
        
        
    ."<table><tr><td width='270'><b>Ф.И.О.</b>  <font color='#FF0000'>*</font><br /><input type='text' name='name' value='$name' size='18' class='input' /></td><td width='50%'>Адрес сайта<br /><input type='text' name='adres' value='$adres' size='18' class='input' /></td></tr>"
                        
        
    ."<tr><td width='270'>Электронная почта <font color='#FF0000'>*</font><br /><input type='text' name='email' value='$email' size='18' class='input' /></td><td width='50%'>Телефон <font color='#FF0000'>*</font> <br /><input type='text' name='tel' value='$tel' class='input' /></td></tr>"

        
    ."<tr><td colspan='2'>Сфера деятельности компании <br /><textarea rows='5' cols='40' type='text' name='sfera' value='$sfera' class='input'></textarea></td></tr>"
        
        
    ."<tr><td colspan='2'>Задачи, которые планируется решать при помощи сайта<br /><textarea rows='5' cols='40' type='text' name='zadaci' value='$zadaci' class='input'></textarea></td></tr>"
        
                        
    ."<input type='hidden' name='rnd2' value='$rnd'>"
                        
    ."<input type='hidden' name='hash2' value='$hash'>"
                        
        
    ."<tr><td colspan='2'>Ваше сообщение<br /><textarea rows='5' cols='40' type='text' name='message' value='$message' class='input'></textarea></td></tr>"
        
        
    ."<tr><td colspan='2'>Введите число на картинке:&nbsp&nbsp&nbsp<img border='0' align='absmiddle' src='captcha.php?rnd=$rnd&hash=$hash'>&nbsp&nbsp&nbsp<input type='text' name='cap' value='$cap' SIZE=10></td></tr>"

        
    ."</div><tr><td colspan='2' align='center' style='padding-right:35px;'><br>"
        
        
    ."<input type='submit' name='submit' src='/images/buttom.gif' class='button'  />"
        
        
    ."</td></tr></table>"

        
    ."</form>";
    ?>
    при нажатии "отправить" пишет якобы отправилось но на самом деле нет. что не так в этом скрипте? Поправьте новичка в php
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    попробовал на денвере все работает письма отправляются на мыло
    может на хостинге какой косяк с настройками

    ЗЫ на серваке тоже проверил все пришло как надо так что тереби хостера
     
  3. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Могут быть причиной непонятки с заголовками.
    Попробуй добавить:
    PHP:
    $headers .= "From:  <".$email.">\r\n";
    У меня подобная проблема решилась добавлением
    PHP:
    $headers  "Content-type: text/html; charset=windows-1251 \r\n";
    $headers .= "From:  <".$email.">\r\n";
     
  4. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    731
    Симпатии:
    421
    как-то так...

    Я бы на вашем месте в функцию mail() загонял переменные, а не на прямую текстом. Например, так

    PHP:
    $to      'test@moi-mail.com';
    $subject '=?Windows-1251?B?'.base64_encode($name).'?=';
    $message 'ФИО: '.$name.'\nСообщение: '.$message.'\n email: '.$email'.\nтелефон: '.$tel.'\nАдрес сайта: '.$adres.'\nСфера сайта: '.$sfera.'\nСайт для определенных задач: '.$zadaci;

    $headers 'MIME-Version: 1.0' "\n";
    $headers .= 'Content-type: text/html; charset=windows-1251'."\n";
    $headers .= 'Content-Transfer-Encoding: 8bit'."\n";
    $headers .= 'From: *** Mail Delivery System <noreply@***.ru>';
    $headers .= '.';

    mail($to$subject$message$headers);

    echo
    "Ваше сообщение отправлено. Мы свяжемся с Вами в указанное Вами время.";} 
    Если Вы все сделали правильно, а получатель письмо не получает (помните, что временные издержки на доставку письма зависят от многих факторов и могут колебаться от нескольких минут до нескольких часов), убедитесь в том, что оно действительно отправилось. Это необходимо сделать в 2 этапа. Вначале попробуйте выполнить код:
    PHP:
    <?php 
    if (mail("nobody@example.com""the subject""Example message",   
    "From: webmaster@example.com \r\n")) { 
        echo 
    "messege acepted for delivery"
    } else { 
        echo 
    "some error happen"

    ?>
    В случае если уже на этом шаге Вы получили ошибку, это может означать, что у Вас либо не запущен sendmail (или другой транспортный агент), либо он неправильно настроен, либо существуют ошибки в php.ini. К примеру, в последнее время распространено правило не принимать письма, в которых не указан правильный заголовок Mail-from.

    В случае, если сообщение было принято к отправке, попробуйте посмотреть файл /var/log/mail или попросить об этом Вашего администратора, так как для этого требуются права суперюзера (root). Это можно сделать при помощи команды tail /var/log/mail. В случае успешной отправки письма в log-файле должны появится строки нижеприведенного типа либо сообщение об ошибке:
     
  5. Xata6

    Xata6 Постоялец

    Регистр.:
    20 мар 2007
    Сообщения:
    84
    Симпатии:
    5
    в данном случае лучше лог выгрузи или смотри по логу ошибку в поисковике, обычно стандартные ошибки в не настроенности системы, или по падении в спам из за не существующих доменов не выходя за пределы почтового сервера.
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Были косяки с функцией мейл() у некоторых хостингов. Например mail_ru . Этот же скрипт переносил на другой хостинг - все отсылалось. Техподдержка ничего путнего ответить не смогла. Видимо просто от них спам рассылался, вот и забанили ип адрес. Может быть у вас такая же проблема?
     
  7. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
  8. Spirt51

    Spirt51 Постоялец

    Регистр.:
    3 авг 2009
    Сообщения:
    78
    Симпатии:
    16
    Нужно сделать тест для пользователей (текстовые поля и поля с выбором варианта из выпадающего списка), и чтоб результат приходил на нужный емеил.
    Пробовал модулем order, но он как я понял для старой версии.
    Посоветуйте что-то под DLE 9.4