Четверг, 16.05.2024, 08:36
DigitalBox
Приветствую Вас Гость | RSS
Главная Использование электронной почты Регистрация Вход
Меню сайта

Использование электронной почты



Электронная почта повсеместно используется в Internet и в приложениях РНР в частности. Электронные сообщения служат для разных целей. Например, Web-приложение может передать покупателю по электронной почте уведомление о сделанном заказе. Или в случае, когда пользователь создает на Web-узле новую учетную запись, электронное сообщение используется для верификации данных. Если же клиент забыл свой пароль, он может щелкнуть на кнопке I forgot my password (Я забыл свой пароль) и по электронной почте ему будет выслана вся необходимая информация. Электронную почту можно использовать для отправки ежемесячных сообщений подписчикам и т.д.

Язык РНР предоставляет обширный набор функций для работы с электронной почтой. Следующий раздел посвящен вопросам, связанным с отправкой электронных сообщений из сценариев РНР.


Настройка РНР для работы с электронной почтой

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

В большинстве случае сервер исходящей почты использует SMTP (Simple Mail Transfer Protocol — простой протокол передачи электронной почты). При этом не так важно, чем вы пользуетесь: локальной сетью на работе, кабельным модемом дома или услугами провайдера Internet, — все электронные сообщения отправляются сервером SMTP. Причем для доступа к серверу пользователь должен знать его параметры.

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

Если же вам не удалось определить параметры сервера исходящей почты, следует обратиться к администратору сети, а в случае использования услуг провайдера Internet — к соответствующей компании. Имя почтового сервера может выглядеть следующим образом:

mail.ispname.net

При использовании операционной системы Linux/Unix именем почтового сервера может быть sendmail.

Определившись с параметрами сервера исходящей электронной почты, следует внести соответствующие изменения в конфигурационный файл php.ini. Для этого необходимо найти в нем следующие строки:

[mail function]
; Только для операционной системы Win32.
SMTP = localhost

; Только для операционной системы Win32.
;sendmail_from = me@localhost.com

; Только для операционной системы Unix.
;Можно также установить дополнительные параметры
; (по умолчанию: "sendmail -t -i").
;sendmail_path =

Пользователи операционной системы Windows должны изменить первые два значения. Первое из них соответствует имени сервера исходящей почты. Например:

SMTP = mail.ispname.com

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

sendmail_from = Janet@Valade.com

Третий параметр предназначен для пользователей операционной системы Unix. В большинстве случаев используемое по умолчанию значение является корректным. Однако, если что-либо не так, следует обратиться к администратору сети и узнать точные параметры.

Для пользователей операционной системы Unix. Иногда путь к почтовому серверу sendmail может иметь вид /usr/sbin/sendmail или /usr/lio/sendmail. Если же ваша система не использует sendmail, то в качестве почтового сервера применяется некоторая программная оболочка. Например, программа Qmail может находиться по адресу /var/qmail/bin/sendmail или /var/qmail/bin/qmail-inject.

Для того чтобы внесенные в файл php.ini изменения вступили в силу, необходимо перезапустить Web-сервер.


Отправка электронных сообщений

Для отправки электронного сообщения из сценария РНР предусмотрена функция mail(). Ее синтаксис имеет следующий вид:

mail(адрес, тема, сообщение, заголовки);

Функция mail() имеет следующие параметры:

  • адрес (электронный адрес получателя);
  • тема (строка, соответствующая теме электронного сообщения);
  • сообщение (содержимое электронного сообщения);
  • заголовки (строка, содержащая переменные заголовка электронного сообщения).

Рассмотрим такой пример:

$to = "janet@valade.com";
$subj = "Тест";
$mess = "Это проверка работы электронной почты";
$headers = "bcc:techsupport@mycompany.com\r\n";
$mailsend = mail( $to, $subj, $mess, $headers);

В данном фрагменте кода электронное сообщение передается пользователю, адрес которого содержится в переменной $to. Причем сообщения можно отправлять нескольким адресатам:

$to= "janet@valade.com,me@mycompany.com";

Переменная $headers в этом примере отправляет скрытую копию сообщения на адрес технической поддержки techsupport@mycompany.com. В одном сообщении можно использовать несколько заголовков:

$header = "сс:tech@mycompany.com\r\nbcc:sales@mycompany.com";

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

Функция mail() возвращает значение TRUE, если сообщение было отправлено успешно, и FALSE — в противном случае. Однако следует заметить, что значение TRUE не гарантирует того, что сообщение обязательно дойдет до адресата.


Отправка почтовых вложений

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

Для отправки вложения следует использовать заголовок специального формата. Например:

Content-disposition: attachment; filename=test.txt

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

$to = "janet@valade.com";
$subj = "Проверка использования вложения";
$mess = <<< END
Это тестовое сообщение,
отправляемое в виде вложения.
Проверьте это на практике.
END;
$headers = "Content-disposition: attachment;
filename=test.txt\n";
$headers .= "cc:sales@mycompany.com\n";
$mailsend = mail($to,$subj,$mess,$headers);

Сформированное сообщение имеет два заголовка: Content-disposition и сс. Причем оба они содержатся в переменной $headers и заканчиваются символом \n. Для некоторых программ электронной почты следует использовать символы \r\n.

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

При отправке электронного сообщения содержимое файла можно поместить в одну длинную текстовую строку. Это можно сделать с помощью функции file_get_contents():

$mess = file_get_contents("имя_файла");

В листинге А приведен сценарий, передающий в качестве вложения текстовый файл.

Листинг А. Сценарий, отправляющий текстовый файл в качестве вложения электронного сообщения

‹?php
/* Имя сценария:  mailTest
  * Описание:          передает текстовый файл в качестве
  *                            вложения электронного сообщения.
  */
     $filename = "mydata.txt";
     $mess = file_get_contents($filename);
     $to = "janet@valade.com";
     $subj = "Отправка данных в качестве вложения";
     $headers = "Content-disposition: attachment; filename=mydata.txt\n";
     if(!$mailsend = mail($to, $subj, $mess, $headers))
     {
          echo "Почта не отправлена\n";
     }
     else
     {
          echo "Почта отправлена\n";
     }
?›

В приведенном сценарии с помощью функции file_get_contents() содержимое файла считывается в текстовую строку $mess. Заголовок сообщения помещается в переменную $headers. Отправка сообщения по электронной почте осуществляется с использованием функции mail(). При этом, если не удалось отправить письмо, пользователь получит соответствующее сообщение.

Чтобы отправить во вложении не только текстовые файлы, в заголовке Content-type электронного сообщения следует указать соответствующий тип:

Content-type: тип_содержимого

Так, для простого текстового файла в качестве значения тип_содержимого используется text/plain (в большинстве случаев это значение используется по умолчанию). Для файла HTML нужно указывать заголовок text/html.

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

image/gif
image/jpeg
audio/x-wav
audio/vnd.rn-realaudio
video/mpeg
video/avi

Файлы, создаваемые другими приложениями, также могут быть как текстовыми, так и двоичными. Например, файлы в формате RTF являются текстовыми, а файлы Word или Excel— двоичными. В общем случае неизвестно, каким программным обеспечением сгенерирован двоичный файл, поэтому в качестве заголовка Content-type лучше использовать значение application/octet-stream.

Для того чтобы двоичные файлы дошли по электронной почте в целости и сохранности, их следует зашифровать. Для этого в РНР предназначена функция:

$mess = chunk_split(base64_encode($string));

Переменная $string инкапсулирует содержимое двоичного файла, полученное с использованием функции fread().

Кроме того, при передаче закодированного файла в электронном сообщении необходимого указать это, используя заголовок

Content-Transfer-Encoding: base64

В листинге В приведен сценарий РНР, позволяющий отправлять графические файлы (двоичные и закодированные) в качестве вложений электронных сообщений.

Листинг В. Сценарий РНР для передачи графических файлов в качестве вложений электронных сообщений

‹?php
/* Имя сценария:  mailGraphic
  * Описание:           передает графические файлы в качестве
  *                                вложений электронных сообщений.
  */
     $filename = "logo.gif";
     $fh = fopen($filename, "rb");
     $fileContent = fread($fh, filesize($filename));
     fclose($fh);
     $mess = chunk_split(base64_encode($fileContent));
     $to = "janet@valade.com";
     $subj = "Отправка изображения в качестве вложения";
     $headers = "Content-disposition: attachment; filename=logo.gif\n";
     $headers .= "Content-type: image/gif\n";
     $headers .= "Content-Transfer-Encoding: base64\n";
     if(!$mailsend = mail($to, $subj, $mess, $headers))
     {
          echo "Почта не отправлена\n";
     }
     else
     {
          echo "Почта отправлена\n";
     }
?›

В приведенном сценарии закодированное содержимое файла сохраняется в переменной $mess. Кроме того, в сообщение включено несколько заголовков, необходимых для передачи такого рода файлов в качестве вложений.

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz