PHP_LogoОтправка письма

Для отправки писем в php можно воспользоваться функцией mail.
Эта функция принимает три обязательных параметра: e-mail получателя, тема и текст письма. Помимо обязательных параметров, есть возможность передачи еще двух не обязательных. Первый — это строка, которая будет добавлена в отправляемые заголовки письма. Во второй необязательный параметр можно передавать флаги в виде аргументов командной строки для программы, которая осуществляет отправку писем. Пример:

Отправка писем нескольким получателям

Чтобы отправить письмо сразу нескольким получателем, как и в примере выше, можно воспользоваться php функцией mail. Единственное отличие от прошлого примера, будет заключаться в том, что параметр, передающий e-mail получателя, будет содержать не один адрес, а несколько, разделенных запятыми.
Пример:

Как определить, читали письмо или нет

Чтобы определить, читали отправленное письмо или нет, можно воспользоваться небольшой хитростью – отправить в письме картинку, которая будут подгружаться с удаленного сервера, и при обращении к этой картинке, можно реализовать вызов счетчика количества просмотров. Для того чтобы при обращении к картинке на сервере выполнялся скрипт можно воспользоваться apache модулем mod_rewrite. Он позволит реализовать редирект с картинки на скрипт. Для этого достаточно добавить в корень сайта файл .htaccess с кодом:

Таким образом, при обращении к картинке с адресом:

будет вызван скрипт http://example.com/img.php?em=dGVzdEBtYWlsLnJ1
Как вы уже наверняка обратили внимание, помимо вызова самого скрипта, происходит передача GET параметра em – имя картинки. Это сделано специально, с помощью этого параметра можно
передавать любую необходимую информацию, например e-mail адрес получателя письма. В данном примере это закодированный, с помощью base64, e-mail получателя. Остается только написать скрипт, который будет обрабатывать обращения и возвращать в ответ картинку и записывать статистику обращений:

В примере был использован код для генерации картинки, об этом подробнее читайте в другой статье. Также была использована ранее не описанная функция base64_decode, она осуществляет декодирование данных закодированных с помощью функции base64_encode в формат base64.

Отправка писем с вложенными файлами

Для отправки писем с вложениями достаточно использовать функцию php — mail. Файлы, которые будут отправлены, необходимо закодировать в формат base64 и добавить в тело письма, а также указать в отправляемых заголовках письма информацию о том, что в письме присутствуют файлы. Чтобы отделить закодированный файл от текста письма, необходимо добавить текстовый разделитель, это может быть любая уникальная строка. Разделитель следует обозначить в отправляемых заголовках, и выводить до и после прикрепления файла в тексте письма.
Пример:

В примере было использовано несколько функций.
base64_encode – кодирует данные в формат base64.
chunk_split – разбивает строку на фрагменты, осуществляет
перенос каждого фрагмента на новую строку, по умолчанию длина одного фрагмента 76 символов.
basename – определяет имя файла из указанного пути.
file_get_contents – получает содержимое файла.

Отправка писем с картинками в тексте

Не редко необходимо отправлять письма, в которых помимо текста должна быть отправлена html-верстка с картинками. Реализовать отображение картинок можно двумя способами: прописывать для картинок полные пути – загрузка изображений будет происходить с уделенного сайта. Или отправлять картинки вместе с письмом. Второй способ работает более корректно, поскольку при загрузке изображений с удаленных сайтов некоторые почтовые программы блокируют отображение.

Для верстки письма используются все те же теги и стили, что и при обычной верстке, за исключением того, что стили должны находиться в самой верстке, а не в подключаемых файлах. Еще одно отличие – это то, что для изображений(img) в атрибутах src необходимо прописывать не путь, а CID изображения. CID — Content-ID будет указывать на картинку, которую необходимо предварительно закодировать в base64 и отправим вместе с письмом. Как отправлять письма с вложениями, было подробнее описано в предыдущем примере – «Отправка письма с вложениями».
Пример:

Отправка писем через SMTP протокол

SMTP — сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP. Для работы с почтовыми серверами через SMTP протокол, необходимо реализовывать обращение с помощью сокетов. Для открытия сокета используется php функция fsockopen. После подключения к почтовому серверу, необходимо «представиться» серверу – передать ему логин и пароль пользователя, которому доступна отправка почты. После этого осуществляется передача e-mail адресов отправителя и получателя.
И в последнюю очередь передаются «тело» письма: заголовки и содержимое. В качестве примера, приведен код, который обращается к почтовому серверу yandex.ru:

Получить письма. Пример работы с IMAP
протоколом

IMAP — протокол для доступа к электронной почте. Через этот протокол можно получать любую информацию о почте пользователя. Для работы с почтовым сервером через протокол IMAP в php существует много функций. В примере используем только несколько основных:
imap_open – открывает соединение с почтовым сервером по протоколу IMAP.
imap_search – осуществляет поиск писем по заданным параметрам, например, «NEW» — найдет все новые. И возвращает массив номеров писем.
imap_header – возвращает заголовки письма по его номеру.
imap_fetchbody – получает содержимое «тела» письма по его номеру.
imap_close – закрывает соединение с почтовым сервером.
imap_last_error – возвращает последнюю IMAP-ошибку.
Пример: