За последние 24 часа нас посетили 22929 программистов и 1050 роботов. Сейчас ищут 608 программистов ...

Варинги и Нотисы при попытке отправить сообщение с аттачем.

Тема в разделе "Работа с почтой", создана пользователем Мартынов Семён Андреевич, 2 май 2006.

  1. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Добрый день!
    Я в php новичок, но решил что правильнее было-бы написать в этой теме.

    Код (Text):
    1.  
    2. Notice: Trying to get property of non-object in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    3.  
    4. Warning: filesize() [function.filesize]: stat failed for file.zip in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    5.  
    6. Warning: fread(): supplied argument is not a valid stream resource in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    7.  
    8. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
    9.  
    10. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Мартынов Семён Андреевич, покажит код в районе 109 и 144 строк.
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Мартынов Семён Андреевич

    $attachment = fread(fopen("$attach->value", "r"), filesize("$attach"));

    это полный бред. откуда у тебя берется объект $attach ? что то я не видел $attach = new ClassName() строки ...

    если берешь готовые или чужие скрипты, то хотябы ПОЧИТАЙ документацию по изучаемому вопросу, а не лепи чужой НЕ работающий код.

    Уважай себя и нас.
     
  4. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    О!...
    Пардон на счёт
    Код (Text):
    1.  
    2. $attachment = fread(fopen("$attach->value", "r"), filesize("$attach"));
    На самом деле реально в скрипте написано
    Код (Text):
    1.  
    2. $attachment = fread(fopen("$attach", "r"), filesize("$attach"));
     
  5. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Когда отправляю без аттача, получаю
    Код (Text):
    1.  
    2.  
    3. Warning: fread(): supplied argument is not a valid stream resource in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    4.  
    5. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
    6.  
    7. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
    С аттачем
    Код (Text):
    1.  
    2. Warning: fopen(217878.jpg) [function.fopen]: failed to open stream: No such file or directory in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    3.  
    4. Warning: filesize() [function.filesize]: stat failed for 217878.jpg in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    5.  
    6. Warning: fread(): supplied argument is not a valid stream resource in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 144
    7.  
    8. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
    9.  
    10. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
     
  6. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
  7. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Вы хоть почитайте в мануале что значат варнинги и нотисы, которые вы тут приводите. Если сразу не научитесь отлаживать код, потом будет гораздо сложнее, и вам же в первую очередь
     
  8. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    О.к.
    Я так понимаю варингсы - это ошибки критичные, а нотисы - это просто уведомления, которые можно принять к свединью.
    Смотрим...
    supplied argument is not a valid stream resource
    По русски
    Поставляемый аргумент не соответствует ресурсу потока
    а вот что бы это могло значить и как с етим бороться?...

    И ещё, я так понял из вышесказанного, что касяк в коде... А почему на винде под денвером срабатывало? Т.е. для начала подскажите в каком направлении двигаться - настройки сервера или поиск ошибок в скрипте?
     
  9. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Варнинги - друзья программиста :) С ними отладка идет намного быстрее.
    направление такое: у вас выскочил варнинг, там есть 3 важные части:
    1. функция, которая вызвала варнинг
    2. Описание варнинга. Открываем мануал, читаем в каких случаях он появляется в этой функции
    3. Строка кода где возник варнинг. там можно проверить, какие параметры передаются в функцию, какие функции вызывались ранее, и т.д.

    Кстать намекну, что варнинги лучше читать сверху вниз, т.е. перед fread были еще несколько, которые могут быть причиной именно этого варнинга :)

    А то что он где-то там работал, а где-то еще не работает.. Такие задачи сходу не решаются. Ответ придет в процессе исправления варнингов :)
     
  10. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Вот такой код должен работать?
    Код (Text):
    1.  
    2. <?php
    3.     $sucess=$mail("sam_temp_mailbox@bk.ru","test","Hellow!!!");
    4.     echo($sucess);
    5. ?>
    t.e. я в начале пишу кому, потом заголовок, потом текст...
    По идее функция mail должна возвращать булевы значения, я прав?
    а я получаю на такой код
    Код (Text):
    1.  
    2. Notice: Undefined variable: mail in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 2
    3.  
    4. Fatal error: Function name must be a string in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 2
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    нотис бывает куда важнее. уж поверь ...
    учись проверять то, что возвращают тебе функции. в мануале расписано что они могут возвратить. на твоем примере ты ожидаешь, что тебе вернут какой-нить объект, например ресурс от mysql_connect(), но в случае ошибки функция вернет FALSE, а ты этого не проверяешь и скрипт выполняется дальше ...

    снеси нахрен этот денвер и поставь НОРМАЛЬНУЮ связку апач+пхп+mysql (скачать можно с http://php.ru), тогда монго-много вопросов отпадут сами собой.

    p.s. я, млин, не понимаю тягу к продуктам "все в одном флаконе", ты попробуй свой обед вылить в одну тарелку, перемешать, а потом съесть? только не говори мне, что это, почему-то, не вкусно!
     
  12. Mavir

    Mavir Guest

    Notice: Undefined variable: mail in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 2

    :)

    Там пишется, что не определена переменная $mail. Ты ее определял раньше? :)

    Еще почитай про синтаксис переменных и функций
     
  13. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Со значком $ я сообразил уже сам, но не успел отписаться :D
     
  14. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Функция mail вернула единичку :D это хорошо!
    Но письмо до меня пока так и не дошло :( это плохо!

    Я внёс изменения в код
    Код (Text):
    1.  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    3. <html>
    4. <head>
    5.     <title>Отправка письма</title>
    6.     <meta content="text/html;charset=windows-1251" http-equiv="Content-Type">
    7.     <style>
    8.     a
    9.     {
    10.         text-decoration: underline;
    11.         color:#0000FF;
    12.     }
    13.     </style>
    14. </head>
    15. <body>
    16. <?
    17. //php_value error_reporting 7
    18. $mailto="sam_temp_mailbox@bk.ru";//определяем, куда будут сыпаться мессаги
    19. if (empty($ok))//Если не нажата кнопка O.k., то
    20. {
    21. ?>
    22.     <script  type="text/javascript" src="http://www.uagp.net/includes/js/overlib_mini.js"></script>
    23.     <h3>Отправить сообщение об ошибке</h3>
    24.     Поля, отмеченные ( <a href="#" onmouseover="return overlib('Поле обязательно для заполнения!!!', BELOW, RIGHT);" onmouseout="return nd();" >*</a> ), обязательны для заполнения.
    25.     <br><br>
    26.     <form action="<?echo $PHP_SELF;?>" method="post">
    27.     <style>
    28.     a
    29.     {
    30.            text-decoration: none;
    31.            color:#000000;
    32.     }
    33.     </style>
    34.     <table>
    35.     <tr>
    36.         <td>Ваше имя:</td>
    37.         <td> <input type="text" name="username" size="50" maxlength="50"></td>
    38.     </tr>
    39.     <tr>
    40.         <td><a href="#" onmouseover="return overlib('Поле обязательно для заполнения!!!', BELOW, RIGHT);" onmouseout="return nd();" >*</a> E-mail:</td>
    41.         <td><input type="text" name="mailfrom" size="50" maxlength="50"></td>
    42.     </tr>
    43.     <tr>
    44.         <td><a href="#" onmouseover="return overlib('Поле обязательно для заполнения!!!', BELOW, RIGHT);" onmouseout="return nd();" >*</a> Замечание:</td>
    45.         <td><textarea cols="50" rows="10" name="question"></textarea></td>
    46.     </tr>
    47.     <tr>
    48.         <td>Вложение:</td>
    49.         <td><input type="file" name="attach" size="37"><a href="#" onmouseover="return overlib('По умолчанию, это С:\\file.txt', BELOW, RIGHT);" onmouseout="return nd();" ><img src="http://www.uagp.net/includes/js/ThemeOffice/tooltip.png" border="0" alt=""/></a></td>
    50.     </tr>
    51.     </table>
    52.     <input type="submit" name="ok" value="отправить">
    53. </form>
    54.  
    55. <?php
    56. }
    57. else
    58. {
    59.     //проверка корректности е-мэйла
    60.     if(!preg_match("/^([a-z,0-9])+@([a-z,0-9])+(.([a-z,0-9])+)+$/", $mailfrom))
    61.     {
    62.           $error = "Не верно заполнено поле: <b>E-mail</b><br>";
    63.     }
    64.  
    65.     //если "замечание" не заполнено, то
    66.     if (empty($question))
    67.     {
    68.           $error .= "Не заполнено поле: <b>Ваш вопрос</b><br>";
    69.     }
    70.  
    71.     //если переменная $error не пуста, то выводим её содержимое и выходим.
    72.     if (!empty($error))
    73.     {
    74.         echo "<p align=\"center\">";
    75.         echo $error;
    76.         //echo "<br><a href=\"javascript:history.go(-1)\" class=\"text\">Вернуться назад</a>";
    77.         echo "<a href=\"javascript:history.go(-1)\" onmouseover=\"return overlib('Нажмите для возврата к форме отправки письма', BELOW, RIGHT);\" onmouseout=\"return nd();\" >Вернуться назад</a>";
    78.         echo "<p>";
    79.         exit;
    80.     }
    81.  
    82.     //если $error пуста, то переходим к отправке сообщения
    83.     class mime_mail
    84.     {
    85.           var $parts;//массив для вложений
    86.           var $to;//получатель
    87.           var $from;//отправитель
    88.           var $headers;//заголовок
    89.           var $subject;//тема
    90.           var $body;//текст послания
    91.  
    92.           // создаем класс
    93.           function mime_mail()
    94.           {
    95.                  $this->parts = array();
    96.                  $this->to = "";
    97.                  $this->from = "";
    98.                  $this->subject = "";
    99.                  $this->body = "";
    100.                  $this->headers = "";
    101.           }
    102.  
    103.           // функция добавления файлов в мыло
    104.           function add_attachment($message, $name = "", $ctype = "application/octet-stream")
    105.           {
    106.                  $this->parts [] = array
    107.                  (
    108.                         "ctype" => $ctype,
    109.                         "message" => $message,
    110.                         "encode" => $encode,
    111.                         "name" => $name
    112.                  );
    113.           }
    114.  
    115.           // Построение сообщения (multipart)
    116.           function build_message($part)
    117.           {
    118.                  $message = $part["message"];
    119.                  $message = chunk_split(base64_encode($message));
    120.                  $encoding = "base64";
    121.                  return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n";
    122.           }
    123.  
    124.           function build_multipart()
    125.           {
    126.                  $boundary = "b".md5(uniqid(time()));
    127.                  $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
    128.                  for($i = sizeof($this->parts)-1; $i>=0; $i--) $multipart .= "\n".$this->build_message($this->parts[$i]). "--$boundary";
    129.                  return $multipart.= "--\n";
    130.           }
    131.  
    132.           // функция "посылка сообщения"
    133.           function send()
    134.           {
    135.                  $mime = "";
    136.                  if (!empty($this->from)) $mime .= "From: ".$this->from. "\n";
    137.                  if (!empty($this->headers)) $mime .= $this->headers. "\n";
    138.                  if (!empty($this->body)) $this->add_attachment($this->body, "", "text/plain");
    139.                  $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
    140.                  mail($this->to, $this->subject, "", $mime);
    141.           }
    142.     }
    143.  
    144.     //формирование сообщения и его отправка
    145.     if (!empty($attach))
    146.     {
    147.         $attachment = fread(fopen("$attach", "r"), filesize("$attach"));
    148.     }
    149.     $mail = new mime_mail();
    150.     $mail->from = $mailfrom;
    151.     $mail->headers = "Errors-To: [EMAIL=sam_temp_mailbox@bk.ru]sam_temp_mailbox@bk.ru[/EMAIL]";
    152.     $mail->to = $mailto;
    153.     $mail->subject = "Сообщение с сайта http://www.uagp.net об ошибке в программе!";
    154.     $mail->body = $question;
    155.     if (!empty($attach))
    156.     {
    157.         $mail->add_attachment("$attachment", "$attach", "Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAgEASABIAAD/7QT+UGhvdG9zaG");
    158.     }
    159.     $sucess=$mail->send();
    160.  
    161.     echo($sucess);
    162.     if ($sucess)
    163.     {
    164.         echo "<p align=\"center\">Спасибо. Ваше замечание отправлено.<br><br>";
    165.         echo "<a href=\"http://www.uagp.net\" onmouseover=\"return overlib('Нажмите для перезода на главную страницу сайта предприятия', BELOW, RIGHT);\" onmouseout=\"return nd();\" >ФГУП УРАЛАЭРОГЕОДЕЗИЯ</a>";
    166.         //echo "<a href=\"http://www.uagp.net\">ФГУП УРАЛАЭРОГЕОДЕЗИЯ</a></p>";
    167.     }
    168.  
    169. }
    170. ?>
    171.  
    172. </body>
    173.  
    174. </html>
    Т.е. подставил
    Код (Text):
    1.  
    2.     if (!empty($attach))
    3.     {
    4.      
    5.     }
    Теперь при отправке пустого (без аттача) сообщения получаю
    Код (Text):
    1.  
    2. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
    Вот 109-ая строка
    Код (Text):
    1.  
    2.                         "encode" => $encode,
    Честно говоря ума не приложу за что она отвечает... Предполагаю что-то с перекодировкой...

    Если загоняю эту строку в коменты (//), то после нажатия кнопки отправить получаю чистый белый экран!
    Без варингов, нотисов и сообщений об удачной или неудачной отпраке..
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Мартынов Семён Андреевич
    mail() это ФУНКЦИЯ, а не переменная $mail, о чем тебе, дурачку, нотис и талдычит ...!
     
  16. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это означает лишь, то что релей принял письмо, а вот факт ДОСТАВКИ это совсем другое и его никак не поймать.
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    $mail->headers = "Errors-To: sam_temp_mailbox@bk.ru";

    пропиши туда СВОЙ ЯЩИК и получишь отлуп. только не mail.ru ... для прикола впиши мой 440hz@mail.ru. я тебе отлуп чюда започсу.

    $mail->headers = "Errors-To: 440hz@mail.ru";
     
  18. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Не понял...
    Вы говорите не вписывать туда mail.ru? и при этом даёте свой ящик... НА МЭИЛ.РУ?!?

    Я и прописал СВОЙ ящик sam_temp_mailbox@bk.ru...
     
  19. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Мартынов Семён Андреевич
    ой! ну рука дрогнула ... сорри ... 440hz@php.ru
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда

    а почему этот ящик обрамлен ? почтовик их точно НЕ ПОНИМАЕТ!

    8)
     
  21. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    Код (Text):
    1.  
    2. $mail->headers = "Errors-To: sam_temp_mailbox@bk.ru";
     
  22. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Мартынов Семён Андреевич
    ну и так покатит ...
     
  23. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0
    phpbb - однако...

    Всё равно
    Код (Text):
    1.  
    2. Notice: Undefined variable: encode in /var/www/html/uagp.net/www/prod/2006/tagil/index.php on line 109
     
  24. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Мартынов Семён Андреевич

    $encode = 'KOI8-R';
    $this->parts [] = array
    (
    "ctype" => $ctype,
    "message" => $message,
    "encode" => $encode,
    "name" => $name
    );
     
  25. Мартынов Семён Андреевич

    Мартынов Семён Андреевич Активный пользователь

    С нами с:
    2 май 2006
    Сообщения:
    19
    Симпатии:
    0