<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Отправка e-mail в PHP

Отправка 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 = "abc@gmail.com";
  $subject = "Robot - Робот";
  $message = "Message, сообщение!";
  mail ($to, $subject, $message);
?>

Как видите, всё интуитивно понятно: кому отправлять, какая тема и само сообщение. Если Вы используете пакет Denwer, то после запуска скрипта, Вы сможете найти файл в директории "tmp/!sendmail", в котором и содержатся данные Вашего письма. Открыть эти файлы можно либо в блокноте, но лучше открыть их в какой-нибудь почтовой программе (например, The Bat или Microsoft Outlook).

Я не даром написал вперемешку русский и английский текст, чтобы проверить кодировку. Очень часто она распознаётся неправильно, и в результате, пользователи видят "абракадабру". Чтобы этого избежать необходимо задать кодировку. И как раз для кодировки, а также для других особых параметров и существует четвёртый аргумент функции mail():

<?php
  $to = "abc@gmail.com";
  $subject = "Robot - Робот";
  $message = "Message,\n сообщение!";
  $headers = "From: MyRusakov.ru <abc@gmail.com>\r\nContent-type: text/plain; charset=windows-1251 \r\n";
  mail ($to, $subject, $message, $headers);
?>

Теперь давайте расшифрую то, что здесь написано. В переменной headers мы задали следующие параметры: в поле "От кого" будет стоять "abc@gmail.com" (то есть сообщения можно отправлять далеко не от своего имени). Сообщение также является обычным текстовым (text/plain) в кириллической кодировке (windows-1251), то есть в нашей с Вами родной кодировке, в которой имеется русский язык и английский. И, кстати, "\n" - это переход на новую строку (аналог <br /> в HTML).

Также сообщения можно отправлять в HTML-формате. Для этого достаточно всего лишь заменить "text/plain" на "text/html". И Вы сможете в сообщении использовать HTML-теги. Только не забывайте, что всякие теги, наподобие: "<script>", "<iframe>" и другие, - фильтруются любой уважающей себя почтовой системой. Однако, использовать теги оформления ("<b>", "<i>", "<br />" и другие) Вы можете. И давайте, напоследок, отправим e-mail с использованием HTML-тегов:

<?php
  $to = "abc@gmail.com";
  $subject = "Robot - Робот";
  $message = "Hello World!<br /><i>Это письмо отправлено <b>роботом</b>
  и отвечать на него не нужно!</i>";
  $headers = "From: MyRusakov.ru <abc@gmail.com>\r\nContent-type: text/html; charset=windows-1251 \r\n";
  mail ($to, $subject, $message, $headers);
?>

Вот и всё. Как видите, тема очень простая, а отправлять e-mail в PHP очень важно уметь.

До скорых встреч.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (17):

Alim_(I) Alim_(I) 11.06.2011 22:26:33

А как сделать автоматическое сообщение вот такие сообщения например это "вместо_этого_текста_приклепленный_фаил Вот файл который вы заказали с вместо_этого_текста_название_сайта. Если вы не заказывали данный файл просто игнорируйте это сообщение." или "вместо_этого_текста_имя_пользователя на ваш комментарий ответили!"?

Ответить

Admin Admin 11.06.2011 22:28:40

Для этого надо делать шаблон письма, например, такой: "%user% на Ваш комментарий ответили". Затем через PHP перед отправкой надо заменить с помощью функции str_replace %user% на конкретное имя пользователя.

Ответить

Alim_(I) Alim_(I) 11.06.2011 22:44:43

Спасибо, но вопрос был как сделать письмо чтобы автоматический приходило всем зарегистрированным, или каким-то особенным пользователям, или вообще просто любым.

Ответить

Admin Admin 11.06.2011 22:47:39

Это надо сделать в цикле. Если же пользователей много, то здесь всё гораздо сложнее, так как сервер может не выдержать. Для отправки письма большому количеству пользователей нужно запускать скрипт много раз, каждый раз отправляя небольшие партии. Например, при первом запуске отправить 20 писем. При втором ещё 20, при третьем ещё 20 и так далее, пока не будут отправлены все письма. Интервал надо делать хотя бы 30 секунд.

Ответить

Alim_(I) Alim_(I) 12.06.2011 09:59:39

А если написать <?php $to = "1@mail.ru, 2@mail.ru, 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? И как сделать такое уведомление автоматическое, например пользователь отправил письмо на форум, и ему на почтовый ящик такое письмо "Вы отправили новое сообщение на форум вместо_этого_текста_название_сайта"?

Ответить

Admin Admin 12.06.2011 13:02:13

Да, письмо дойдёт до всех трёх ящиков. Однако, минус данного способа: каждый из получателей увидит адреса других получателей. Сделать уведомление автоматическим элементарно. Например, при добавлении нового сообщения на форум, надо вызвать функцию mail(). Тогда сразу же придёт уведомление.

Ответить

Alim_(I) Alim_(I) 12.06.2011 13:29:27

Спасибо, а как сделать каждый из получателей не видел адрес других получателей? Или можете сказать как Вы делали такие уведомления?

Ответить

Admin Admin 12.06.2011 13:30:30

Надо через цикл (например, for) по очереди вызывать функцию mail, каждый раз отправляя одному получателю.

Ответить

malina95 malina95 01.10.2012 20:10:35

Михаил, очень нужна ваша помощь...на моём тестовом хостинге не работает функция "mail", но там можно через сторонний SMTP сервер...Расскажите как им пользоваться,и как его настроить...Прошу расскажите мне или напишите статью...Оооочень надо

Ответить

Admin Admin 01.10.2012 20:32:02

Проверьте можно ли на хостинге прямо указать сторонний SMTP, чтобы функция mail на него отправляла. Либо поищите скрипты, которые будут сами отправлять почту в обход стандартной функции.

Ответить

Юрий В Юрий В 26.03.2013 12:46:24

извините за нелепый вопрос: а как на этот скрипт попадает пользователь? ведь РНР "сидит" и работает на сервере?..и можно ли каким то образом РНР-скрипты вставлять в HTML страницы?..

Ответить

Admin Admin 26.03.2013 13:20:21

Пользователь к нему обращается, отправляя запрос. В HTML-страницах нельзя использовать PHP, но в PHP-коде можно использовать HTML.

Ответить

Юрий В Юрий В 26.03.2013 15:56:48

а как понимать это <html> <head> </head> <body> <?php $login = $_COOKIE['login']; $pass = $_COOKIE['pass']; if (check($login, $pass)) echo "Здравствуйте, $login"; else echo showForm(); ?> </body> </html> в пред- предыдущей статье?

Ответить

Admin Admin 26.03.2013 21:02:30

Перечитайте мой предыдущий комментарий ещё раз, там я ответил на этот вопрос.

Ответить

adilet970113 adilet970113 29.04.2014 11:11:22

Здравствуйте! Я бы хотел сделать функцию "забыл пароль" Благодаря вам, Теперь я знаю как отправить пароль на почту, а вы можете сказать как проверить email!

Ответить

lisasveta lisasveta 11.10.2014 16:14:39

Добрый день! Михаил, у меня такой вопрос - сайт находится на платном хостинге, POP3-сервер для входящей почты, SMTP-сервер для отправки почты мне предоставили. Функция mail работает, вот только письма идут с почтового аккаунта по умолчанию. Я создала свой ящик на хосте, но вот как теперь сделать так, чтобы при отправке писем аккаунт был новый, а не по умолчанию. В техподдержке мне сказали, что нужно настроить отправку почты через SMTP авторизацию на ящик. Подскажите, если можно или может ссылку - я пишу свой первый сайт - очень нужна подсказка. Спасибо!

Ответить

maqsat maqsat 13.06.2015 22:51:51

а можно сделать рассылку?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.