Обучение HTML, Excel, Word. Как сделать свой сайт бесплатно

Microsoft Office

Сайтостроение

HTML

Программинг

Компьютер

Графика

Разное

· Основы Word
· Основы Excel
· Основы VBA
· Основы OpenOffice
· Как сделать сайт
· Свой сайт от А до Я
· Оптимизация сайта
· Шаблоны для сайта
· Обзор CMS
· Основы HTML
· HTML-теги
· Основы CSS
· Основы PHP
· Основы JavaScript
· Софт для сайта
· Что внутри ПК
· ПК для чайников
· Все о BIOS
· Web-графика
· САПР: AutoCAD
· Статьи
· Форум
· SEO-новости
Главная страница Карта сайта
Учебник PHP
Основы SQL
  1. Введение
  2. Инструменты
  3. Первый шаг
  4. Структура языка
  5. Массивы
  6. Глобальные массивы
  7. Cookies
  8. Сессии
  9. Загрузка файлов
  10. Работа с файлами
  11. Работа с базами данных
  12. Работа в сети
  13. Отправка почты
  14. Безопасность
  15. Автоматизация
  16. Регулярные выражения в PHP
  17. Интеграция
 



Отправка почты

Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

Очень часто на сайтах возникает необходимость отправить письмо администартору или клиенту. Сделать это можно двумя способами: на стороне клиента и на стороне сервера.


Для отправки почты со стороны клиента достаточно в HTML-код страницы добавить ссылку "mailto:" с указанием необходимого адреса:


<a href="mailto:webmaster@server.com">Написать вебмастеру</a> 

Когда пользователь кликает по ссылке, браузер запускает почтовый клиент по-умолчанию и помещает указанный адрес в поле "Кому", так что пользователю достаточно написать текст и отправить письмо. Этот способ никак не связан с PHP, но пользоваться им иногда стоит. Кроме того, это единственный способ вызвать почтовый клиент с сайта, не поддеживающего исполнение скриптов.

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

bool mail(
			string to, 
			string subject, 
			string message 
			[, string additional_headers 
			[, string additional_parameters]] 
			) 

При отправке почты необходимо указать как-минимум три параметра: получателя, тему и текст сообщения.

В качестве адреся получателя "to" можно указывать как отдельный адрес, так и целый список, разделённый запятыми. Отдельный адрес может задаваться в следующих форматах "адрес" или "имя <адрес>":

webmaster@server.com
	или
Site Webmaster <webmaster@server.com>

Тема сообщение "subject"- это обычная строка. Единственное ограничение - строка не должна содержать символов перевода строки или возврата каретки ("\n" и "\r").

Тело сообщения "message" - это текст, который вы хотите отправить получателю. Строки сообщения должны разделяться переводом строки в Unix-стиле (LF), а каждая строка не должна быть длиннее семидесяти символов. Если эти требования не выполняются - сервер может запретить отправку письма.

Кроме обязательных элементов можно указывать два дополнительных - расширенные заголовки и расширенные параметры. Расширенные заголовки служат для добавления к письму дополнительных аттрибутов и блоков, таких как адрес отправителя, адрес отправки копии ("cc"), адрес отправки скрытой копии ("bcc") и т.д. Расширенные заголовки так же позволяют отправлять сообщения в HTML-формате.

Расширенные данные - это блок данных, предназначенный для программы, которая будет отправлять почту. Эти данные в некоторых случаях позволяют осуществить тонкую настройку программы для конкретных нужд. Но в обычной практике этот элемент не используется.

Итак, минимальный скрипт отправки сообщения выглядит так:

<?php 
	// текст сообщения 
	$message = "первая строка\nвторая строка\nтретья строка"; 
	// При помощи функции wordwrap() расставляем
	// переносы так, чтобы строки были не длиннее 70 символов 
	$message = wordwrap($message, 70); 
	// отправляем сообщение 
	mail('webmaster@server.com', 'Тема', $message); 
?> 

Этот скрипт отправит письмо по указанному адресу, но в поле "от кого" будет указан скорее всего служебный адрес почтового сервера провайдера. Поэтому если вы захотите ответить на это письмо - ответ уйдёт в никуда. Чтобы корректно указать отправителя, воспользуемся расширенными заголовками:

<?php 
	$to = 'client@server.com';
	$subject = 'Тема сообщения'; 
	$message = 'Здравствуйте, уважаемый клиент...'; 
	
// формируем расширенные заголовки $headers = 'From: robot@server.com' . "\r\n" . 'Reply-To: webmaster@server.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers); ?>

Этот скрипт отправит клиенту письмо от имени почтового робота вашего сайта (заголовок "From:"). Дополнительно, применив заголовок "Reply-To:", мы указали почтовой программе клиента, что ответы надо пересылать не почтовому роботу, а вебмастеру по указанному адресу. Третий фрагмент ("X-Mailer") не является обязательным и описывает программу, с помощью которой было отправлено сообщение. Согласно почтового протокола, разработчик может при необходимости добавлять собственные расширенные заголовки. Единственное ограничение - имена таких заголовков должны начинаться с "X-".

По-умолчанию, функция mail() отправляет сообщения в текстовом виде. Это означает, что если вы в текст добавите HTML-теги, то они будут восприняты как обычный текст без гипертекстовой разметки. Для того, чтобы отправить HTML-сообщение, снова воспользуемся расширенными заголовками:

<?php
// список получателей $to  = 'client001@server.com, client002@srv.net';

// Тема сообщения
$subject = 'Новости сайта';

// Сообщение в виде HTML-формате
$message = '
<html>
<head>
<title>Новости сайта</title>
</head>
<body>
 <p>Новости на сегодня:</p>
 <table>
   <tr>
    <th>Номер</th><th>Содержание</th> <th>Автор</th><th>Опубликовано</th> </tr>
   <tr>
     <td>1</td><td>первая новость</td> <td>Администратор</td><td>вчера</td>
  </tr>
   <tr>
     <td>2</td><td>вторая новость</td> <td>Администратор</td><td>сегодня</td>
  </tr>
 </table>
</body>
</html>
';

// Указываем правильный MIME-тип сообщения:
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Добавляем необходимые заголовки
$headers .= 'To: Клиент №1 <client001@server.com>, '. 'Клиент №2 <client002@srv.net>' . "\r\n";
$headers .= 'From: News Robot <news@server.com>' . "\r\n";
$headers .= 'Cc: News Archive <newsarc@server.com' . "\r\n";
$headers .= 'Bcc: newscheck@server.com' . "\r\n";

// Отправляем сообщение
mail($to, $subject, $message, $headers);
?>

Этот скрипт отправит письмо в HTML-формате двум получателям, а так же вышлет копии в архив и в контрольный ящик.

Запустить отправку писем можно двумя способами - в результате действий пользователя (например, после обработки данных формы), либо посредством запланированного задания. Первый случай очевиден - пользователь отсылает форму на сервер, там происходит обработка данных и на указанный почтовый ящик отправляются результаты обработки формы (подтверждение регистрации, счета к оплате, содержимое заказа или что-то еще).

Второй способ чаще всего используется, когда скрипт необходимо выполнять периодически (например, ежедневная рассылка новостей). Организация планирования выполнения задачи средствами PHP - задача нетривиальная. Более простой путь - воспользоваться готовыми интсрументами, например crontab. Этот инструмент доступен на большинстве платных Unix-хостингов. Более подробно мы рассмотрим crontab в отдельном уроке.

Дополнительно можно отметить, что попробовать отправку почты с вашего локального сервера у вас не получится. В большинстве случаев в целях безопасности функции почты не настроены и их надо прописать вручную. Указать параметры можно либо в файле php.ini, либо непосредственно в коде перед вызовом функции mail():

// в php.ini

SMTP = localhost
sptp_port = 25


// в коде

ini_set("SMTP", "localhost");
ini_set("smtp_port", "25");

Кроме того, настоятельно рекомендую поставить локальный SMTP-сервер, например, PersonalSMTP. Эта утилита распространяется бесплатно, проста в установке и настройке, но при этом позволяет отлаживать отправку писем даже при отсутствии подключения к Интернет. При использовании PersonalSMTP в конфигурации по-умолчанию используется сервер "localhost" и порт 15025, следовательно перед вызовом функции mail() необходимо добавить строки:

// не забудьте закомментировать их 
// перед публикацией скрипта на сайте.
ini_set("SMTP", "localhost");
ini_set("smtp_port", "15025");

Для работы с электронной почтой уже создано множество классов, поэтому вам нет острой нужды писать весь код самостоятельно. Достаточно посетить соответствующий сайт и скачать одну из бесплатных библиотек, например libmail2008.

 

top




 




Спасибо, что заглянули на сайт. Надеюсь, Вам понравилось. Заходите еще. Здесь всегда рады вам :)
При копировании материалов, размещенных на сайте, ссылка на первоисточник обязательна.
Если понравился этот сайт..

© 2005-2012
Юрий Кордык All Rights Reserved

 

E-mail:
admin@on-line-teaching.com