Отправка писем с вложениями на PHP

Дата: Май 25, 2009

(0) комментариев

В этой статье я хочу освятить пример отправки вложения на почту с помощью функции mail(). На самом деле всё очень просто, необходимо только знать какие пакетные данные и в каком порядке отправляет почтовый сервер. Эти пакеты можно или наснифить или просто воспользоватся приведенными мною :)

Отправка прикреплений происходит так же как и отправка обычного письма, но мы дополнительно вставляем пакетные данные, а именно заголовки следующего вида:

1
2
3
4
5
6
7
8
------------ дата Content-Type:text/html;\n
Content-Transfer-Encoding: 8bit \n text \n
------------ дата
Content-Type: application/octet-stream; \n
name=filename \n
Content-Transfer-Encoding:base64 \n
Content-Disposition:attachment;\n
filename=$fi

Так же мы отправим стандартные, не обязательные пакеты, которые возможно пригодятся тем, кто отправляет почту на прямую через сокеты .
Вот сам скрипт отправки вложения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$from = "admin"; // От кого
$to = "sergey.androsov@mail.ru"; // Кому
$filename = "certificates/image.jpg"; // Полное имя файла
$subj = 'письмо на деревню дедушке'; // Тема сообщения
$text = 'Типо текстик'; // Тело сообщения
$f = fopen($filename,"rb"); // Открываем и читаем бинарно файл $filename
$un = strtoupper(uniqid(time()));

//посылаем шапку
$head = "From: $fromn\n"; // Создаем заголовки нашего письма
$head .= "To: $to \n";
$head .= "Subject: $subj \n";
$head .= "X-Mailer: PHPMail Tool \n";
$head .= "Reply-To: $from \n";
$head .= "Mime-Version: 1.0 \n";
$head .= "Content-Type:multipart/mixed;\n";
$head .= "boundary=\"----------".$un."\" \n";

//посылаем заголовки для отправки файла
$zag = "------------".$un." Content-Type:text/html; \n";
$zag .= "Content-Transfer-Encoding: 8bit \n$text \n";
$zag .= "------------".$un." \n";
$zag .= "Content-Type: application/octet-stream;\n";
$zag .= "name="\".basename($filename)."\" \n";
$zag .= "Content-Transfer-Encoding:base64 \n";
$zag .= "Content-Disposition:attachment;\n";
$zag .= "filename=\"".basename($filename)."\" \n";
$zag .= chunk_split(base64_encode(fread($f,fi

Естественно для отправки вложения оно должно находится на сервере, но думаю это не проблемма. Для загрузки файла можно воспользоваться материалом этой статьи или применить другой подход, вставлять данные полученные непосредственно из временного файла создаваемого функцией copy()

a




    Нет комментариев на "Отправка писем с вложениями на PHP"

    Нет комментариев.


    Вы можете продолжить обсуждение этой статьи на форуме


    Имя : 
    Почта : 
    Сайт : 
    Комментарий : 

    Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.

    Создание сайта - Echo-group Раскрутка сайтов