Отправка почты средствами PHP
Отправка почты из PHP возможна и она легка в реализации - это одна сторона медали. Вторая сторона, что по-моему это одна из самых спамерских функций во всех языках программирования. Но мы будем изучать ее с "хорошей" стороны :)
Именно функция mail отвечает за отправку писем из PHP (хотя есть и другие, но рассмотрим сейчас самую легкую). На вход функции mail подается от 3 до 5 параметров:
- $to: Email-адрес кому мы отсылаем сообщение
- $subject: Тема письма
- $message: Текст письма
- $additional_headers: Заголовки письма
- $additional_parameters: Дополнительные параметры
C первыми тремя параметрами думаю всё понятно, рассмотрим 2 необязательных параметра.
Заголовки письма добавляются по спецификации RFC2822, чтобы что-то понять, надо штудировать сотни страниц английского текста, рассмотрим основные, которые могу пригодиться
From: noreply@phpprogs.ru - указывает с какого Email приходит сообщение
Reply-To: admin@phpprogs.ru - указывает на какой Email должно отсылаться письмо при ответе
Content-type: text/plain; charset=Windows-1251 - указывает тип сообщения и кодировку, если хотите чтобы в письме был HTML, то вместо text/plain укажите text/html
X-Priority: 1 (Higuest) - приоритет сообщения
X-Mailer: CMS-Kolibry - почтовая программа, отправившая сообщение
Со последним параметром не всё так однозначно, применение нашел только когда пользовался услугами хостинга руцентра, там при использовании это функции в поле "ОТ" стоял адрес руцента, помог именно этот параметр, если указать "-fnoreply@phpprogs.ru", то будет корректно отображать поле "ОТ".
Рассмотрим пример отправки
$subject = "Тема письма";
$message = "Текст сообщения";
$headers = "From: noreply@phpprogs.ru\r\n".
"Content-type: text/plain; charset=Windows-1251\r\n";
$ok = mail ($to, $subject, $message, $headers);
if ($ok === false)
echo "Письмо отправлено";
else
echo "Ошибка при отправке письма";

Ну с отправкой почты все понятно. А вот как быть, если на хостинге не работает почта, например, по одной из следующих причин:
1.Стоит ограничение на количество сообщений
2.IP забанен популярными бесплатными почтовиками
3.Ее тупо нет?
Еще вопрос:
Если мы отпраляем сообщение в вендокодировке - его в нее нужно как-то перекодировать?
И еще один:
Как принять почту. Скажем, для подтвержения регистрации.

1. Если есть ограничения на хостинге по времени, то просто ставите sleep(). Если забанен IP, то выход использовать SMTP-аутентификацию (В следующей статье расскажу как). Если "тупо нет" или отключена данная функция, то надо менять хостера.
2. Если в Win1251, то ничего делать не надо
3. Обычно для подтверждения регистрации в письме добавляют ссылка на подтверждение регистрации, а уже при переходе по этой ссылке Вы средствами PHP активизируете аккаунт. Собственно почту принимать не надо на сервере
Отвечу на вопросы по PHP

если поставить sleep(10), то скрипт подождет 10 секунд и потом продолжит работу, ну это в том случае если есть, например, ограничение на 6 писем в минуту
Отвечу на вопросы по PHP

Я говорю про использование sleep, если надо отправить пачку писем, например, с админки, но при этом есть ограничение у хостера
Отвечу на вопросы по PHP

Тогда в случае большой нагрузки (помимо регистрации возможны уведомление) менять хостинг?

Да, нехорошо получилось с комментами, 15 писем на мыло пришло. Сейчас подправил, не должно такое вылезать
Отвечу на вопросы по PHP

"Да, нехорошо получилось с комментами, 15 писем на мыло пришло. Сейчас подправил, не должно такое вылезать"
А в чем была проблема?

Отвечу на вопросы по PHP
