Как к уведомлению на email прицепить файл?

Тема в разделе "Shop-script", создана пользователем Pickles, 18 янв 2011.

  1. Pickles

    Pickles Постоялец

    Регистр.:
    18 июн 2008
    Сообщения:
    56
    Симпатии:
    8
    Суть вопроса такая: Как сделать чтоб администратору присылалось уведомление с телом письма и нужным файлом в аттаче?
    Всем привет!
    Возникла необходимость прицеплять к уведомлению о заказе для администратора файлик с некоторыми данными о заказе, для последующей обработки его в 1С.
    Код для генерации нужного файла та я написал, вот только не могу разобраться как его прицепить к письму. Данные о файле в перменной $filename1
    Создание тела письма происходит в order_functions.php где-то в 1000ной строке (точно не скажу - он уже сильно изменен). Т.е. надо переделывать либо этот код из order_functions.php:
    PHP:
    $res ss_mailCONF_ORDERS_EMAIL,
        
    '=?'.DEFAULT_CHARSET.'?B?'.base64_encode("Çàêàç #".$orderID).'?=',
        
    $html,
        
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".
    CONF_GENERAL_EMAIL.">\n".
        
    stripslashes(EMAIL_MESSAGE_PARAMETERS).
    "\nReturn-path: <".CONF_GENERAL_EMAIL.">"."\n\n");
    либо функцию ss_mail из functions.php.
    Переделывал уже сто раз код, не получается привязать файл. Либо только файл без тела письма, либо тело, а файл не цепляется.
    Помогите кто может!
     
  2. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.266
    КАК ВАРИАНТ!

    Расылка html сообщений и файлов подписчикам
    Скрипт позволяет вести базу данных подписчиков (имя, электронный адрес, время, ip, почтовый сервер),
    делать рассылку писем, отправлять уведомительное письмо при подписании и отписании от рассылки (свои шаблоны писем),
    оповещать администратора о новых подписчиках, экспортировать базу подписчиков в почтовые менеджеры.
    - Установка:
    * для обновления скрипта сохраните настройки в панели администратора.
    1. Распакуйте все файлы в директорию на вашем веб-узле (readme.txt можно не закачивать).
    2. Измените права доступа на папку, к воторой находится скрипт, на 777.
    На папку files, letters и всем шаблонами в этой папке также необходимы права доступа 777.
    3. запустите setup.php, введите необходимые данные и нажмите кнопку установить. После уставновки обязательно удалите setup.php
    4. поместите этот код для вызова формы подписки:
    PHP:
    <?php include("путь к скрипту/show_form.php"); ?>
    например:
    PHP:
    <?php include("tsbsub/show_form.php"); ?>
    5. Для проверки и уведомления о новых подписчиках всавьте следущий код в код вашей страницы:
    PHP:
    <script src="путь к скрипту/check.php"></script>
    например:
    PHP:
    <script src="tsbsub/check.php"></script>
    6. Для вызова панели администратора наберите в браузере <путь к скрипту>/admin.php
    7. Для подтверждения рассылки пользователь должен кликнуть по ссылке вида:
    <путь к скрипту>/write.php?id=[id]&validate=
    Код:
    [/B]
    8. Для отписания от рассылки пользователь должен кликнуть по ссылке вида:
       [B]<путь к скрипту>/write.php?id=[id]&unsub=[code][/B]
    9. Пример потверждающего письма: (его нужно скопировать в окно "шаблон письма" раздела)
    	Все примеры писем сохранены по умолчанию.
    10. Коды для писем: (в письме используются с квадратными скобками)
    [COLOR="Blue"][B][name] - имя подписчика
    [mail] - почта подписчика
    [sendername] - Ваше имя или имя организации
    [id] - персональный номер подписчика
    [code] - персональный код активации/дизактивации рассылки
    [url] - адрес Вашего сайта
    [folder] - папка с этим скриптом[/B][/COLOR]
    11. Если во время тестировании скрипта локально при подписке выскакивает ошибка, сделайте следущее:
        открываем файд [B]write.php[/B] и ищем код: (строчки 60-62)
                 [PHP] if (!getmxrr($emailhost,$mxhosts)) $mailserver=1;
                  else $mailserver=$mxhosts[(count($mxhosts)-1)];
                  //$mailserver=0;[/PHP]
        и закавычиваем первые две и расковычиваем последнюю, вот так:
                  [PHP]//if (!getmxrr($emailhost,$mxhosts)) $mailserver=1;
                  //else $mailserver=$mxhosts[(count($mxhosts)-1)];
                  $mailserver=0;[/PHP]
        т.е. при добавлении email не будет проверяться на существование.
        Эта ошибка возникает т.к. в WIn системе отсутсвует эта функция. На сервере все будет ок (если он конечно под unix).
        Не забудте все исправить при закачке на сервер.
    12. При добавлении файла к письму приоритет имеет путь до файла на сервере. В случае,
        если будут указаны и путь до файла на сервере и путь для загрузки с диска - файл с диска
        загрузится, но прикреплен к письму будет файл относительно локального пути.
    - Обновление (если требуется):
    [B][COLOR="Red"]1.[/COLOR][/B] замените все файлы на сервере файлами из дистрибутива
    [B][COLOR="Red"]2.[/COLOR][/B] выставите права доступа (chmod) папки со скриптом (по умолчанию tsbsub) как 777
    [COLOR="Red"][B]3.[/B][/COLOR] ОБЯЗАТЕЛЬНО! запустите update.php для обновления базы данных
    
    [ATTACH]37750.vB[/ATTACH]
     
    Pickles нравится это.
  3. Pickles

    Pickles Постоялец

    Регистр.:
    18 июн 2008
    Сообщения:
    56
    Симпатии:
    8
    Готово

    Спасибо, но сам все таки добился решения! Нашел похожее решение в интернете и переделал.
    Рассказываю:
    1. В файле order_functions.php поменял код
    PHP:
    $res ss_mailCONF_ORDERS_EMAIL
        
    '=?'.DEFAULT_CHARSET.'?B?'.base64_encode("Çàêàç #".$orderID).'?='
        
    $html
        
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<"
    CONF_GENERAL_EMAIL.">\n"
        
    stripslashes(EMAIL_MESSAGE_PARAMETERS). 
    "\nReturn-path: <".CONF_GENERAL_EMAIL.">"."\n\n");
    на следующий код, где создается CSV файл с нужными данными и формируются данные для отправки письма
    PHP:
    filename1 "./order/"."zakaz_".$orderID.".csv";
    if( !
    file_exists($filename1))
    {
        
    $fp fopen($filename1"w");
        for (
    $i=0$i<count($Cart_normal); $i++)
        {
            
    fwrite($fp$Cart_normal[$i]['Quantity']."; ".$Cart_normal[$i]['product_code']."\n");
        }
        
    fclose ($fp);
        
    $res ss_mailCONF_ORDERS_EMAIL,
                        
    '=?'.DEFAULT_CHARSET.'?B?'.base64_encode("Заказ #".$orderID).'?=',
                        
    $html,
                        
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n".
                        
    "Mime-Version: 1.0\n"."Content-Type:multipart/mixed;",
                        
    "\nReturn-path: <".CONF_GENERAL_EMAIL.">"."\n\n",
                        
    $filename1
        
    );
    }
    Затем в файле functions.php меняем функцию ss_mail на следующую:
    PHP:
    function ss_mail($email$subject$text$headers ""$a$filename)
    {
    $f fopen($filename,"rb");
    $un strtoupper(uniqid(time()));
    $head .= $headers;
    $head .= "boundary=\"----------".$un."\"\n\n";
    $zag "------------".$un."\nContent-Type:text/plain; charset=\"".DEFAULT_CHARSET."\"\n";
    $zag .= "\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($filename))))."\n";
    fclose ($f);
    return @
    mail($email$subject$zag$head);
    }
    Если кому-то понадобится что-то похожее и будут вопросы - задавайте!