русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Отправка сообщений с присоединенными к ним вложениями.


Дата добавления: 2013-12-23; просмотров: 1531; Нарушение авторских прав


Собственная функция mail()

Отправить сообщение с локальной машины можно, не прибегая к функции mail (). Для этого необходимо разработать приложение SMTP-клиента, которое будет соединяться с удаленным SMTP-сервером. В РНР отсутствуют функции для работы с SMTP-серверами, поэтому далее рассмотрим разработку собственной функции для работы с удаленным SMTP-сервером.

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

// Отправка сообщения через удаленный SMTP-сервер

<?php

// Функция отправки сообщения: открывает сокет, ведет диалог с сервером,

// записывает данные, закрывает сокет

function send($server, $to, $from, $subject="",$msg, $headers="")

{

// Формируем поля заголовка

$headers="To: $to\nFrom: $frcro\nSubject: $subject\nX-Mailer: MyMailer\n$headers";

// Соединяемся с сервером по порту 25,

// при этом переменная $fp содержит дескриптор соединения

$fp = fsockopen($server, 25, &$errno, &$errstr, 30);

if (!$fp)

die("Server $server. Connection failed: $errno, $errstr");

// Если соединение прошло успешно, производим запись данных в сокет,

// т. е. открываем наш SMTP-сеанс с удаленным сервером $server

fputs($fp,"HELO $server\n"); // Здороваемся с сервером



// Посылаем поле from

fputs($fp,"MAIL FROM: $from\n");

// Посылаем поле То

fputs($fp,"RCPT TO: $to\n");

// Посылаем поле Data

fputs($fp,"DATA\n");

// Посылаем сообщение, которое содержится в переменной $msg

fputs ($fp, "$msg\r\n" . ". " . "\r\n") ;

// Завершаем SMTP-сеанс

fputs($fp,"\n.\nQUIT\n");

// Завершаем соединение

fclose($fp);

}

// Отправка сообщения

send('mx2.yandex.ru', // Почтовый ретранслятор, к примеру, сервера yandex

'mail@yandex.ru', // Кому

'mail@softtime.ru', // От кого

'Hello!', // Тема

'Привет!'); // Сообщение

?>

В начале функции происходит соединение с почтовым ретранслятором удаленного SMTP-сервера по 25-му порту с помощью функции fsockopen. Затем серверу отправляются SMTP-команды. Текст сообщения должен заканчиваться строчкой на отдельной странице, поэтому точка обязательно должна присутствовать в строке отправки текста сообщения:

fputs($fp, "$msg\r\n.\r\n");

Узнать, какое имя имеют почтовые ретрансляторы конкретного SMTP- сервера, можно при помощи функция getmxrr().

string getmxrr(string hostname, array mxhost, [, array weight])

Эта функция принимает в качестве аргумента имя хоста hostname в данном домене и заполняет массив mxhost списком почтовых ретрансляторов этого домена. Если указан третий необязательный аргумент weight, то функция заполняет его значениями предпочтения, которые возвращает ей почтовый ретранслятор.

// Получение списка почтовых ретрансляторов для Windows

<?php

function win_getmxrr($hostname, &$mxhosts, &$mxweight=false) {

if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') return;

if (!is_array ($mxhosts) ) $mxhosts = array();

if (empty($hostname)) return;

$exec='nslookup -type=MX '.escapeshellarg($hostname);

@exec($exec, $output);

if (empty($output)) return;

$i=-1;

foreach ($output as $line) {

$i++;

if(preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.+)$/i", $line, $parts))

{

$mxweight[$i] = trim($parts[1]);

$mxhosts[$i] = trim($parts[2]);

}

if (preg_match('/responsible mail addr = (.+)$/i', $line, $parts)) {

$mxweight[$i] = $i;

$mxhosts[$i] = trim($parts[1]);

}

}

return ($i!=-1);

}

if (!function_exists('getmxrr')) {

function getmxrr($hostname, &$mxhosts, &$mxweight=false) {

return win_getmxrr($hostname, $mxhosts, $mxweight);

}

}

/* example */

$domain='ukr.net';

echo "<pre>";

getmxrr($domain,$mxhosts,$mxweight);

print_r($mxhosts);

print_r($mxweight);

?>

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

Спецификация MIME (Multipurpose Internet Mail Extensions, многоцелевые расширения почты Интернета) описана в RFC 2045-2049. Спецификация MIME позволяет расширить возможности обычной электронной почты для решения следующих задач:

· пересылки восьмибитовых текстов и восьмибитовых символов в заголовке сообщения;

· пересылки двоичных данных любого типа (графики, аудио, видео и т. д.);

· поддержки сложных типов сообщений (к примеру, сообщений, содержащих данные различных типов).

// Отправка сообщений с вложениями

<?php

// Текст сообщения

$msg = "Привет!";

// Путь к файлу. В данном случае предполагается, что файл

// расположен в том же каталоге, что и скрипт

$path = "t.doc";

// Читаем файл

$fp = fopen($path,"r");

if (!$fp)

{

print "Файл $path не может быть прочитан";

return;

}

$file - fread($fp, filesize($path));

fclose($fp);

$boundary = "--".md5(uniqid(time()) ; // Генерируем разделитель

$headers .= "MIME-Version: 1.0\n";

$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";

$multipart .= "--$boundary\n";

$kod='koi8-r'; // Указываем кодировку

$multipart .= "Content-Type: text/html; charset=$kod\n";

$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";

$multipart .= "$msg\n\n";

Smessage_part = "";

$message_part .= "Content-Type: application/octet-stream";

$message_part .= "; file_name = \"$path\"\n";

$message_part .= "Content-Transfer-Encoding: base64\n";

$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";

$message_part .= chunk_split(base64_encode($file))."\n";

$multipart .= "--$boundary\n".$message_part."--boundary--\n";

// Отправляем сообщение

if(mail("ttt@mail.ru", "Привет", $multipart, $headers))

{

echo "Письмо успешно отправлено";

}

?>




<== предыдущая лекция | следующая лекция ==>
Электронная почта | Установка расширения DOM XML


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.