От автора: мой пятилетний племянник разгадал тайную причину изобретения электронной почты. Просто человеку надоело бегать за почтальоном, чтобы отправить письмо. Так и появились электронные почтовые ящики. Тогда получается, что функция mail PHP была разработана авторами языка потому, что им лень было заходить каждый раз на email, чтобы отправить очередное электронное письмо.
Что за функция такая?
Функция нужная и важная, но ее применение требует соблюдения нескольких принципов. Главный из них заключается в том, что mail() не подходит для пересылки большого количества писем. Так как после каждой отправки функция каждый раз закрывает, а затем заново открывает соединение с почтовым сервером (SMTP). Это может негативно сказаться на производительности всего ресурса, и привести к перерасходу серверных мощностей, выделенных хостером.
Также хочу отметить, что настройка функции mail PHP на сервере происходит в соответствующем разделе файла конфигурации php.ini. Настроек всего несколько. Они устанавливают значение заголовков по умолчанию, задают путь к лог-файлам, порт и т.д.
Всего функция mail() принимает 5 аргументов, хотя обязательными являются всего 3:
«Мыло» отправителя.
Title письма.
Текст.
Например:
1 2 3 |
<?php mail("my@email.com", "Sample", "Sample email"); ?> |
Если используете Денвер, то ищите все отправленные письма по этому пути на виртуальном диске: Z:\tmp\!sendmail
Другие особенности mail()
Применение данной функции имеет множество нюансов, список которых зависит от используемой платформы (ОС) и других параметров. Основные из них я попробую перечислить:
Отправляемое email должно содержать установленный заголовок From, который задается через 4 (необязательный) параметр additional_headers. Его отсутствии может стать причиной того, что функция mail PHP не будет работать.
Все заголовки, установленные через additional_headers, должны быть разделены сочетанием управляющих символов новой строки и перевода каретки(\r\n).
Некоторые почтовые агенты, работающие на Unix, могут автоматически заменять \n на \r\n. В результате заголовки разделяются двумя символами перевода строки и одним переводом каретки, что может привести к выводу ошибки. Если email не отсылается, попробуйте разделить все хедеры одним символом \n. Но помните, что такой синтаксис является нарушением существующих стандартов.
Длина каждой строки не должна быть больше 70 символов. Строки между собой разделяются сочетанием управляющих символов \r\n.
Если функция «не фурычит»
Проще всего настроить отправку писем на локальном сервере. После тестирования в Денвере проверенный скрипт может не работать на «настоящем» сервере. Одной из причин того, почему не работает функция mail PHP на вашем хостинге, может быть отсутствие указанного почтового ящика отправителя. В таком случае лучше проверить корректность заданного «мыла», заданного в панели управления хостингом.
Если ваш сайт развернут на основе одной из современных CMS, то в них адрес почтового ящика отправителя задается в специальном модуле, отвечающем за рассылку email.
Кроме этого функция mail() может не работать, если в php.ini она занесена в раздел запрещенных «к употреблению» (disable_functions). Чтобы не рыскать как угорелому по содержанию этого (довольно объемного) файла, лучше использовать функцию phpinfo(), которая выводит все параметры языка в специальной таблице.
Для проверки функции mail в PHP имеет смысл использовать простенький отладочный код. Его следует разместить в новом файле в корневой директории сайта на серверном пространстве:
1 2 3 |
<?php print mail("name@my.ru","header","text"); ?> |
Если в результате получите 1 на экране, то все нормально и письмо отправлено. Откуда единица? Ее возвращает после выполнения функция mail().
Ну, с функцией mail() разобрались. А если вам и с ее помощью трудно (лень) отправлять письма, то разработайте свой инновационный метод. Может быть, его описанию я посвящу свой очередной материал :).
Комментарии (1)