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

Pickles

Постоялец
Регистрация
18 Июн 2008
Сообщения
56
Реакции
8
Суть вопроса такая: Как сделать чтоб администратору присылалось уведомление с телом письма и нужным файлом в аттаче?
Всем привет!
Возникла необходимость прицеплять к уведомлению о заказе для администратора файлик с некоторыми данными о заказе, для последующей обработки его в 1С.
Код для генерации нужного файла та я написал, вот только не могу разобраться как его прицепить к письму. Данные о файле в перменной $filename1
Создание тела письма происходит в order_functions.php где-то в 1000ной строке (точно не скажу - он уже сильно изменен). Т.е. надо переделывать либо этот код из order_functions.php:
PHP:
$res = ss_mail( CONF_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
КАК ВАРИАНТ!

Расылка 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 для обновления базы данных
[POSTS=5]
[ATTACH]37750.vB[/ATTACH][/POSTS]
 

Вложения

  • tsb_sub1.38.4.rar
    25,8 KB · Просмотры: 4
Готово

Спасибо, но сам все таки добился решения! Нашел похожее решение в интернете и переделал.
Рассказываю:
1. В файле order_functions.php поменял код
PHP:
$res = ss_mail( CONF_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_mail( CONF_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);
}

Если кому-то понадобится что-то похожее и будут вопросы - задавайте!
 
Назад
Сверху