Практическая работа№21
Тема: Отправка данных по e-mail. Примеры скриптов для форм обратной связи на сайтах
Цель: закрепление знаний и умений по написанию скриптов для отправки данных по e-mail, управлению и обработке информации, получаемой в качестве обратной связи.
Время выполнения: 2 часа
Теоретический материал:
Самый простой способ отправить письмо при помощи PHP - воспользоваться стандартной функцией mail. Она имеет следующий синтаксис:
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
Обязательные параметры:
- E-mail получателя
- Заголовок письма
- Текст письма
Необязательные параметры:
- Дополнительные заголовки письма
- Дополнительные параметры командной строки
Возвращаемое значение:
- true, если письмо было принято к доставке
- false, в противном случае.
Простейший пример ее использования выглядит так:
<?php
mail("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");
?>
Если на экране появилась ошибка "Fatalerror: Calltoundefinedfunction: mail()", это значит, что либо PHP собран без поддержки функции mail, либо она запрещена настройками сервера. Если Вы столкнулись с такой проблемой, воспользуйтесь возможностью отправки писем при помощи сокетов (sockets).
Дополнительные заголовки письма (additionalheaders) могут использоваться для указания кодировки письма, адреса отправителя, обратного адреса и множества других опций. Они должны быть разделены переводом строк: комбинацией "\r\n".
Одна из часто возникающих проблем при отправке почты в koi8 - это формирование заголовка письма. Для ее решения необходимо воспользоваться следующим кодом, который переводит строку в кодировке win-1251 в понятный большинству почтовых клиентов koi8 заголовок.
Как отправить письмо c вложением (attachment)
Переменная $mime является экземпляром класса Mail_mime. В его конструкторе есть необязательный параметр, определяющий, какой именно перевод строки будет использован: "\n" или "\r\n". Данный класс предназначен для формирования тела и заголовков отправляемого письма. При помощи метода setTXTBody определяют текстовую часть письма. В качестве параметра метод принимает строку или имя файла, который будет использован. Аналогично при помощи метода setHTMLBody задают содержимое HTML-версии письма.
Метод addAttachment. Принимаемые параметры:
- string $data
Полный путь к прикрепляемому файлу на сервере либо его содержимое. Обязательный параметр.
- string $c_type
Значение заголовка Сontent-type, который будет отправлен. Необязательный параметр, значение по умолчанию - application/octet-stream.
- string $name
Имя прикрепляемого файла. Будет использован только в случае, если первый параметр ($data) является содержимым файла.
- boolean $isfile
Определяет, является ли первый параметр путем к файлу. Необязательный параметр, значение по умолчанию - true.
- string $encoding
Значение заголовка Content-Transfer-Encoding, определяющего формат, в котором будет отправлено приложение. Необязательный параметр. Допустимые значения: base64 (используется для двоичных файлов), quoted-printable(используется для текстовых файлов). Значение по умолчанию: base64.
Таким образом, есть два способа применения данного метода.
1. указывая путь к файлу на сервере:
$mime->addAttachment('/home/user/report.txt', 'text/plain');
2. указывая содержимое файла (в таком случае третий и четвертый параметры необходимо указывать принудительно):
$mime->addAttachment($contentFile, 'text/plain', 'report.txt', false);
Переходим к формированию заголовка и тела письма. Это все еще обязанности экземпляра класса Mail_mime. Для формирования тела письма применяется метод get, который в качестве необязательного параметра принимает ассоциативный массив. Ключами могут выступать следующие значения: text_encoding, html_encoding, 7bit_wrap, text_charset, html_charset. Для формирования заголовков используется метод headers. В качестве необязательного параметра принимает хеш-массив.
Вызов метода get() должен осуществиться до того, как будет вызван метод headers().
Сам процесс отправки уже сформированного письма возложен на класс Mail. Вначале необходимо при помощи статического вызова метода factory создать экземпляр данного класса.
Процесс отправки почты завершается вызовом метода send, принимающего в качестве входящего параметра список адресатов, заголовки письма и его тело.
Как отправить письмо c картинками
Отправка письма с вложением и отправка HTML-письма с вложением существенно отличаются по своей природе. Конечно же, и те и те находятся в теле письма, закодированы в base64, но используемые в обоих случаях заголовки различаются.
Использование функции addHTMLImage. Она принимает следующие параметры:
- string $data
полный путь к прикрепляемому изображению на сервере либо его содержимое. Обязательный параметр.
- string $c_type
значение заголовка Сontent-type, который будет отправлен. Необязательный параметр, значение по умолчанию: application/octet-stream.
- string $name
имя прикрепляемого изображения. Будет использовано только в случае, если первый параметр ($data) является содержимым файла.
- boolean $isfile
определяет, является ли первый параметр путем к изображению. Необязательный параметр, значение по умолчанию: true.
Аналогично методу addAttachment существует два способа вызова этого метода: в качестве первого параметра можно указывать путь к изображению либо двоичные данные изображения. Во втором случае третий и четвертый параметры являются обязательными.
Особенность этого метода заключается в том, что каждому изображению при помощи заголовка Content-ID: <8820c4185> ставиться в соответствие уникальный ключ. После этого все ссылки на прикрепляемое изображение заменяются ссылками на его ключ. В результате, в пришедшем к получателю письме будет строка вида <IMG SRC="cid: 8820c4185">, которую почтовый клиент проанализирует, извлечет содержимое из соответствующей секции письма и "покажет картинку".
Альтернативные способы отправки писем
На сегодняшний день распространены следующие способы отправки писем из php-скриптов:
- Посредством вызова функции mail
- Непосредственно вызовом sendmail-а
- При помощи сокетов
- Используя COM-объект
Задания:
Задание 1Напишите PHP-скрипт для отправки одногруппнику письмо с приветствием и анекдотом на тему компьютеров.
Задание 2Напишите PHP-скрипт для отправки одногруппнику письмо с вложенным файлом – документом MS Word
Задание 3Напишите PHP-скрипт для отправки одногруппнику письмо с приветствием и вложенным изображением – своей фотографией
Ход работы:
1. Указать путь к файлу на сервере:
$mime->addAttachment('/home/user/report.txt', 'text/plain');
2. Указать содержимое файла (в таком случае третий и четвертый параметры необходимо указывать принудительно):
$mime->addAttachment($contentFile, 'text/plain', 'report.txt', false);
Контрольные вопросы:
1. Какая функция позволяет отправить письмо по e-mail?
2. Опишите синтаксис команды mail.
3. Какая функция позволяет отправить письмо с вложенными изображениями? Опишите синтаксис этой функции.
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.