Отправка e-mail в PHP
Обычно я пишу вступление о том, почему данная тема так важна для изучения. Но не в этот раз, потому что здесь, уверен, ни у одного человека не возникнет вопрос: "Зачем отправлять e-mail в PHP?". Поэтому предлагаю сразу приступить к делу и узнать об этом более подробно, тем более, что проще реализации отправки e-mail через PHP и придумать нельзя, так что поймут даже те, кто не знаком с PHP вообще.
Для начала давайте с Вами разберёмся немного с теорией. Скучно, но поверьте важно. Для отправки e-mail необходим SMTP-сервер. На большинстве платных хостингах он обязательно имеется. Однако, если такой возможности нет (допустим, хостинг бесплатный или очень дешёвый), то тогда можно воспользоваться сторонним SMTP-сервером (например, mail.ru). То есть главное: для отправки необходим SMTP-сервер.
Во-вторых, чтобы принимать e-mail необходим POP-сервер. К чему я всё это говорю. А к тому, что очень часто люди спрашивают на форумах: "Почему у меня не работает отправка e-mail в PHP?". А при этом люди пытаются отправить письма с сервера, на котором вообще нет SMTP. Очень важно: PHP e-mail не отправляет! Отправляет e-mail приложение sendmail, которое имеется на операционных системах Unix, на которых и стоят большинство серверов. А PHP просто передаёт команды этому приложению. Надеюсь, объяснил понятно. Поэтому первое, что необходимо сделать - это раздобыть приложение sendmail. Но порадую тех, кто пользуется пакетом Denwer, так как у них это приложение уже встроено. Правда, с одной особенностью. Реальной отправки писем не происходит - они все складываются в директорию "tmp/!sendmail". Но если письмо, которое Вы отправили в PHP, там оказалось, то можете быть уверены, что на 99% на реальном хостинге всё будет работать. Хотя, если Вам очень хочется по-настоящему отправлять e-mail, то Вы можете скачать sendmail, настроить его на какой-нибудь SMTP-сервер, например, mail.ru, затем изменить путь к sendmail в php.ini (настройки PHP) и дальше уже радоваться жизни.
А теперь переходим к PHP. Для отправки e-mail используется всего одна функция - mail(). Принимает эта функция четыре параметра, три из которых являются обязательными:
<?php
$to = "[email protected]";
$subject = "Robot - Робот";
$message = "Message, сообщение!";
mail ($to, $subject, $message);
?>
Как видите, всё интуитивно понятно: кому отправлять, какая тема и само сообщение. Если Вы используете пакет Denwer, то после запуска скрипта, Вы сможете найти файл в директории "tmp/!sendmail", в котором и содержатся данные Вашего письма. Открыть эти файлы можно либо в блокноте, но лучше открыть их в какой-нибудь почтовой программе (например, The Bat или Microsoft Outlook).
Я не даром написал вперемешку русский и английский текст, чтобы проверить кодировку. Очень часто она распознаётся неправильно, и в результате, пользователи видят "абракадабру". Чтобы этого избежать необходимо задать кодировку. И как раз для кодировки, а также для других особых параметров и существует четвёртый аргумент функции mail():
<?php
$to = "[email protected]";
$subject = "Robot - Робот";
$message = "Message,\n сообщение!";
$headers = "From: MyRusakov.ru <[email protected]>\r\nContent-type: text/plain; charset=windows-1251 \r\n";
mail ($to, $subject, $message, $headers);
?>
Теперь давайте расшифрую то, что здесь написано. В переменной headers мы задали следующие параметры: в поле "От кого" будет стоять "[email protected]" (то есть сообщения можно отправлять далеко не от своего имени). Сообщение также является обычным текстовым (text/plain) в кириллической кодировке (windows-1251), то есть в нашей с Вами родной кодировке, в которой имеется русский язык и английский. И, кстати, "\n" - это переход на новую строку (аналог <br /> в HTML).
Также сообщения можно отправлять в HTML-формате. Для этого достаточно всего лишь заменить "text/plain" на "text/html". И Вы сможете в сообщении использовать HTML-теги. Только не забывайте, что всякие теги, наподобие: "<script>", "<iframe>" и другие, - фильтруются любой уважающей себя почтовой системой. Однако, использовать теги оформления ("<b>", "<i>", "<br />" и другие) Вы можете. И давайте, напоследок, отправим e-mail с использованием HTML-тегов:
<?php
$to = "[email protected]";
$subject = "Robot - Робот";
$message = "Hello World!<br /><i>Это письмо отправлено <b>роботом</b>
и отвечать на него не нужно!</i>";
$headers = "From: MyRusakov.ru <[email protected]>\r\nContent-type: text/html; charset=windows-1251 \r\n";
mail ($to, $subject, $message, $headers);
?>
Вот и всё. Как видите, тема очень простая, а отправлять e-mail в PHP очень важно уметь.
До скорых встреч.
-
- Михаил Русаков
Комментарии (20):
А как сделать автоматическое сообщение вот такие сообщения например это "вместо_этого_текста_приклепленный_фаил Вот файл который вы заказали с вместо_этого_текста_название_сайта. Если вы не заказывали данный файл просто игнорируйте это сообщение." или "вместо_этого_текста_имя_пользователя на ваш комментарий ответили!"?
Ответить
Для этого надо делать шаблон письма, например, такой: "%user% на Ваш комментарий ответили". Затем через PHP перед отправкой надо заменить с помощью функции str_replace %user% на конкретное имя пользователя.
Ответить
Спасибо, но вопрос был как сделать письмо чтобы автоматический приходило всем зарегистрированным, или каким-то особенным пользователям, или вообще просто любым.
Ответить
Это надо сделать в цикле. Если же пользователей много, то здесь всё гораздо сложнее, так как сервер может не выдержать. Для отправки письма большому количеству пользователей нужно запускать скрипт много раз, каждый раз отправляя небольшие партии. Например, при первом запуске отправить 20 писем. При втором ещё 20, при третьем ещё 20 и так далее, пока не будут отправлены все письма. Интервал надо делать хотя бы 30 секунд.
Ответить
А если написать <?php $to = "[email protected], [email protected], 3,@mail.ru"; $subject = ""; $message = ""; $headers = "From: вместо_этого_текста_название_сайта <вместо_этого_текста_емэйл>\r\nContent-type: text/html; charset=windows-1251 \r\n"; mail ($to, $subject, $message, $headers); ?> то письмо отправится на почтовые ящики 1, 2, 3? И как сделать такое уведомление автоматическое, например пользователь отправил письмо на форум, и ему на почтовый ящик такое письмо "Вы отправили новое сообщение на форум вместо_этого_текста_название_сайта"?
Ответить
Да, письмо дойдёт до всех трёх ящиков. Однако, минус данного способа: каждый из получателей увидит адреса других получателей. Сделать уведомление автоматическим элементарно. Например, при добавлении нового сообщения на форум, надо вызвать функцию mail(). Тогда сразу же придёт уведомление.
Ответить
Спасибо, а как сделать каждый из получателей не видел адрес других получателей? Или можете сказать как Вы делали такие уведомления?
Ответить
Надо через цикл (например, for) по очереди вызывать функцию mail, каждый раз отправляя одному получателю.
Ответить
Михаил, очень нужна ваша помощь...на моём тестовом хостинге не работает функция "mail", но там можно через сторонний SMTP сервер...Расскажите как им пользоваться,и как его настроить...Прошу расскажите мне или напишите статью...Оооочень надо
Ответить
Проверьте можно ли на хостинге прямо указать сторонний SMTP, чтобы функция mail на него отправляла. Либо поищите скрипты, которые будут сами отправлять почту в обход стандартной функции.
Ответить
извините за нелепый вопрос: а как на этот скрипт попадает пользователь? ведь РНР "сидит" и работает на сервере?..и можно ли каким то образом РНР-скрипты вставлять в HTML страницы?..
Ответить
Пользователь к нему обращается, отправляя запрос. В HTML-страницах нельзя использовать PHP, но в PHP-коде можно использовать HTML.
Ответить
а как понимать это <html> <head> </head> <body> <?php $login = $_COOKIE['login']; $pass = $_COOKIE['pass']; if (check($login, $pass)) echo "Здравствуйте, $login"; else echo showForm(); ?> </body> </html> в пред- предыдущей статье?
Ответить
Перечитайте мой предыдущий комментарий ещё раз, там я ответил на этот вопрос.
Ответить
Зависит от настроек сервера.У меня у хостера,по умолчанию разрешено.<?php ?> выполняется в документе html.
Ответить
Здравствуйте! Я бы хотел сделать функцию "забыл пароль" Благодаря вам, Теперь я знаю как отправить пароль на почту, а вы можете сказать как проверить email!
Ответить
Добрый день! Михаил, у меня такой вопрос - сайт находится на платном хостинге, POP3-сервер для входящей почты, SMTP-сервер для отправки почты мне предоставили. Функция mail работает, вот только письма идут с почтового аккаунта по умолчанию. Я создала свой ящик на хосте, но вот как теперь сделать так, чтобы при отправке писем аккаунт был новый, а не по умолчанию. В техподдержке мне сказали, что нужно настроить отправку почты через SMTP авторизацию на ящик. Подскажите, если можно или может ссылку - я пишу свой первый сайт - очень нужна подсказка. Спасибо!
Ответить
а можно сделать рассылку?
Ответить
Да, можно, нужно иметь массив (или БД) с сабами и через for отправить email всем (я делал именно так)). Естественно, надо понимать, когда должны отправляться письма.
Ответить
А в Хостии есть сервер?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.