Відправка листів за допомогою PHP: Прикріплення файлу
Лист, що містить прикріплений файл, дещо відрізняється від простого. У ньому додаються деякі заголовки, і трохи змінюється сама побудова, хоча безсумнівно сам лист залишається текстовим файлом. Але давайте все по порядку.
Одна з особливостей - наявність заголовка Mime-Version.
Цей заголовок вказує стандарт, якому відповідав би тіло повідомлення.
Повідомлення, відповідні MIME зобов'язані утримувати таке поле заголовка з наступним текстом:
Якщо ми хочемо відіслати листа з прикріпленими файлами, то необхідно використовувати заголовок
який позначає, що лист складається з декількох частин, кожна з яких містить свій заголовок Content-type.
Для позначення кордону цих частин необхідно використовувати параметр boundary. який ще називається маркером кордону.
Значення цього параметра може служити будь-який рядок. Але треба врахувати, що вона повинна бути унікальною і не зустрічалася в тілі листа. Інакше лист може бути неправильно розбите на частини.
При поділі листи на частини перед маркером повинні стояти два знака дефіса.
А останній маркер, який позначає кінець листи, повинен містити в кінці два знака дефіса.
Для кожної частини необхідно встановити свої заголовки.
Після заголовків необхідно поставити два знаки перекладу рядка.
Якщо у нас йде частина з текстом, то треба заголовок Content-Transfer-Encoding привласнити значення quoted-printable. або 7bit. або 8bit.
Для частини з файлом цей заголовок має дорівнювати base64.
Тема Content-Disposition. присутній у другій частині, вказує, як поштовій програмі слід відобразити дану частину листа. Він може приймати значення attachment (ця ділянка не є частиною листа, а просто прикріплений до нього у вигляді файлу) і inline (включення, яке використовується безпосередньо в листі, наприклад, картинка, що вставляється в HTML).
У першій частині заголовком
вказали, що це простий текст з кодуванням Windows.
У другій же частині заголовком
вказали, що тип файлу - rar-архів, а ім'я файлу - file.rar.
Якщо відправляємо gif-картинку, його Content-type буде виглядати:
У разі, якщо заздалегідь не відомо, який тип файлу відправляємо, або формат файлу не є стандартним, слід заголовку Content-type привласнити значення application / octet-stream.
Прикріплені файли повинні бути розміщені в листі в форматі base64. Перетворити файл у цей формат можна за допомогою PHP-функції base64_encode ().
Тепер змінну $ str_file. яка містить файл, можна вставляти в лист.
echo "Повідомлення не відправлено!";>;