|
автор: No name (13.07.2004 в 23:23) |
|
| Хотел сам написать скрипт рассылки прайс-листа на php подписавшимся юзерам, но ничего из этого не получилось. Может поможете хотя бы элементарным примером? | |
|
|
|
|
|
|
|
для: No name
(13.07.2004 в 23:23)
| | Давайте начнем по порядку. Что не получилось?
Базу е-мейлов сделали?
Добавлять, удалять е-mail-ы, редактировать ее можно?
Отправку хотя бы одного письма сделали?
А отправку всем пользователям сразу?
А отправку письма со вложением?
На каком пункте у Вас возникли проблемы?
| |
|
|
|
|
автор: No name (14.07.2004 в 16:57) |
|
|
для: glsv (Дизайнер)
(13.07.2004 в 23:33)
| | Дело в том что нужно отправлять не текст а ФАЙЛ. | |
|
|
|
|
|
|
|
для: No name
(14.07.2004 в 16:57)
| | Т.е. нужно отсылку письма со вложением сделать? На этом этапе проблемы?
Ну если, так то придется звать на помощь Максима Валерьевича – он как раз недавно этим занимался.
| |
|
|
|
|
|
|
|
для: No name
(14.07.2004 в 16:57)
| | Примерно так...
Суть механизма отправки файлов в письме состоит в том, что письмо состоит из нескольких частей, которые отделены друг от друга уникальным разделителем. Именно этот разделитель позволяет прикладывать к письму несколько файлов так, чтобы их содержимое не смешивалось в процессе передачи данных.
Для того чтобы отправить вложенный файл, надо:
1. Прочитать это файл в какую-либо переменную (здесь и далее: это просто примеры функций, а не полностью отлаженный код):
<?php
function attachment($path="", $name = "", $encoding_type="application/octet-stream") {
if (!file_exists($path.$name)) {
print "File $path.$name dosn't exist.";
return;
}
$fp=fopen($path.$name,"r");
if (!$fp) {
print "File $path.$name coudn't be read.";
return;
}
$file_content=fread($fp, filesize($path.$name));
fclose($fp);
$headers[]=array("body"=>$file_content, "name"=>$name, "en_type"=>$encoding_type);
}
?>
|
2. Затем нужно построить часть письма, независимо от того, простой это текст или приатаченный файл:
<?php
function build_part_msg($i) {
$message_part="";
$message_part.="Content-Type: ".$headers[$i]["en_type"];
if ($headers[$i]["name"]!="")
$message_part.="; name = \"".$headers[$i]["name"]."\"\n";
else
$message_part.="\n";
$message_part.="Content-Transfer-Encoding: base64\n";
$message_part.="Content-Disposition: attachment; filename = \"".
$headers[$i]["name"]."\"\n\n";
$message_part.=chunk_split(base64_encode($headers[$i]["body"]))."\n";
return $message_part;
}
?>
|
3. Теперь собираем письмо из разрозненных частей:
<?php
function build_msg() {
$boundary="=_".md5(uniqid(time()));
$headers.="MIME-Version: 1.0\n";
$headers.="Content-Type: multipart/mixed;
$boundary=\"$boundary\"\n";
$multipart="";
$multipart.="This is a MIME encoded message.\n\n";
for ($i=(count($headers-1); $i>=0; $i--)
$multipart.="--$boundary\n".build_part_msg($i);
$mime = "$multipart--$boundary--\n";
}
?>
|
4. Теперь вставляем тело письма (текст), все приатаченные файлы и на выходе получаем одну большую строку, которая и будет нашим письмом (обычно объединяется с функцией отправки письма):
<?php
function get_full_msg()
{
$mime = "";
if (!empty($from)){
$mime .= "From: ".$from." \r\n";
}
if (!empty($file_content)){
attachment("/usr/hosting/yoursite/html/test/","t.doc");
$mime .= "MIME-Version: 1.0\r\n".build_msg();
}
return $mime;
}
?>
|
5. Посылаем письмо.
<?php
function send_mail() // Собственно посыл письма
{
get_full_message();
@mail($to,$subject,"",$mime);
}
?>
|
Вот примерно так это делается. Вообще тема достаточно серьезная и думаю, что скоро мы выложим соответсвующий класс и поместим статейку с более-менее подробным описанием того, как это делать. | |
|
|
|
|
автор: No name (18.07.2004 в 14:57) |
|
|
для: Кузнецов М.В.
(15.07.2004 в 13:37)
| | Будем ждать статью с огромным нетерпением. | |
|
|
|