WeBinstruments

Инструментарий для веб-мастеров

 

Техподдержка и
сопровождение
сайтов


на сайте на всех сайтах для веб разработчиков везде
 
 Скрипты
  PHP скрипты   
  Flash скрипты   
  Javascript скрипты   

 Софт
  Инструменты SEO   
  Разработка сайтов   
  Серверное ПО   

 Документация
  MySQL   
  PHP   
  HTML   
  Протоколы и сервисы Internet   

 Статьи
  PHP   
  MySQL   
  Сервер   
  еще...   

 Услуги и сервисы
  Домены   
  Хостинги   
  Блоки для сайта   

 Новости


 Контакты
  icq: 158325531
  email:
  все контакты: здесь




Atom все поступления
Раздел Статьи
Раздел Файлы
Раздел Новости
Раздел Услуги и сервисы
комментарии

Главная / Файлы / Скрипты и Flash / PHP скрипты / Функции и классы / php_libmail класс для отправки писем


php_LibMail 2.1

28.02.2010 (последний раз редактировалось 17.11.2014)
сайт: http://webi.ru
условия использования: бесплатно

скачать php_libmail 2.1 Последняя версия (17.11.2014)
скачать php_libmail 1.6.1 Старая версия


Описание

Универсальный Php класс для отправки писем через SMTP, либо через стандартную php функцию mail().
Достаточно функциональный и простой в использовании.

Основные возможности:
  • Отправка письма с помощью SMTP, либо через mail() по вашему выбору
  • Отправка прикрепленных к письму файлов (любое количество)
  • Возможности отправки многим адресатам через To, CC или BCC
  • Возможность получить исходный текст письма без отправки, либо после отправки для ведения логов. При отправке через SMTP возращает весь диалог общения с сервером
  • Проверка синтаксиса email адресов
  • Возможность установить запрос о прочтении письма
  • Отправка писем в текстовом формате или в HTML
  • Отправка нескольких разных писем за одно соединение с сервером, при отправке через SMTP
  • Поддержка email адресов в национальных доменах (рф и любых других).


История изменений

версия 2.1 (17.11.2014)
  • Поддержка email-ов с национальными доменами, не только в кириллице (типа имя.рф), но и на любых других языках.
    По умолчанию данная функция выключена, чтобы ее активировать нужно при запуске класса передать третий параметр TRUE
    $m=new Mail('','',true); // Первые два параметра остаются так же как были у вас и раньше. Если у вас ничего не было заполнено, то поставьте пустые кавычки как в этом примере.
    Все адреса с национальными доменами должны быть переданы в юникоде (UTF-8)
версия 2.0 (18.10.2013)
  • Решил уйти от совместимости со старыми версиями PHP, теперь скрипт работает с PHP 5 и выше.
  • Кодировка по умолчанию теперь UTF-8. Обратите внимание, кодировка скрипта тоже UTF-8.
  • Переработан механизм формирования письма и заголовков.
  • Исправлены проблемы с прикреплением файлов с русскими именами.
  • После выполнения скрипта можно узнать статус отправки письма.
    $m->status_mail['status'] - при удачной отправке здесь будет TRUE, при ошибке FALSE
    $m->status_mail['message'] - здесь текст ошибки или удачной отправки
  • Модернизирована отправка HTML письма. Теперь к html версии письма можно добавить альтернативную текстовую.
    Для чего это нужно? Если почтовая программа получателя не умеет обрабатывать html или пользователь в настройках запретил обработку html, то будет отображаться альтернативная текстовая версия. В современном интернете это не очень актуально, так как все сейчас видят письма в HTML, но все почтовые программы по прежнему формируют письмо именно с альтернативным текстом.
  • Кодирование письма в base64. Теперь кодирование в base64 включено по умолчанию, очень советую так и оставить, но кому не нравится смогут переключиться в обычный 8bit.
  • Возможность отправки разных писем за одно соединение, либо одного письма, но индивидуально для некоторых. Поясню. Если вам нужно отправить письмо нескольким получателям, то вы можете как и раньше перечислить их всех с помощью
    $m->To("asd@asd.ru");
    $m->To("yui@xcf.ru");
    В этом случае письмо будет отправлено всем этим адресатам и в поле TO (кому) будут все они перечислены и все получатели будут видеть кому еще было отправлено письмо.
    В этой версии появилась возможность отправлять несколько индивидуальных писем за одно соединение. Сколько таких индивидуальных писем можно отправить за раз, все зависит от лимитов вашего SMTP сервера. Некоторые сервера не разрешают отправлять более пяти писем за раз, другие 100-200 разрешают.
    Если отправляете индивидульные письма не через SMTP, то в данном случае просто будет вызвана несколько раз функция mail() - так что на нее тоже есть ограничения.
  • Совместимость с версией 1.6.1.
    Для перехода с предыдущих версий на 2.0 учтите слудующее.
    $m=new Mail(); - Если вы запускали класс без указания кодировки, то в предыдущих версиях письма формировались в windows-1251, сейчас такая команда запускает UTF-8. Если вам по прежнему нужно использовать windows кодировку, укажите ее $m=new Mail("windows-1251");
    И второй момент. Получение лога по умолчанию не работает. Если вы используете $m->Get();, то сейчас вам нужно сначала включить накопление лога. Для этого до отправки письма включите лог $m->log_on(true); и после этого $m->Get() сработает как прежде.
    В остальном совместимость должна остаться.
версия 1.6.1 (02.10.2013)
  • Добавлена возможность встраивать картинки внутрь html
    Для этого как и раньше прикрепляете картинки к письму
    Например две картинки
    $m->Attach( "1.jpg", "", "image/jpeg" );
    $m->Attach( "2.jpg", "", "image/jpeg" );
    А в самом html тексте письма вставляете картинки так
    <img src="cid:1.jpg">
    <img src="cid:2.jpg">

    Например
    $m->Body( 'Текст <img src="cid:1.jpg"><br>текст<img src="cid:2.jpg"><br> И т.д.', "html" );
    Обратите внимание, тип сообщения должен быть html
версия 1.6.0 (09.12.2011)
  • Добавлена возможность добавлять имена к почтовым ящикам
    Действует в From, To и ReplyTo
    Имя добавляется через разделитель ';' например
    $m->To( "Максим;adm@webi.ru" );
версия 1.5.1 (07.02.2011)
  • Адаптирована функция проверки email адресов на валидность под php 5.2 и выше.
версия 1.5 (28.02.2010)
  • Добавлена возможность отправлять почту через SMTP.
    Подключается с помощью новой команды smtp_on().
версия 1.4 (24.02.2010)
  • адаптация к русской кодировке
  • возможность переименовывать прикрепленный файл
  • возможность отправлять письма в формате html
  • изменения в вызове некоторых функций


Пример использования


<?php
include "libmail.php"; // вставляем файл с классом
$m= new Mail; // начинаем
$m->From( "asd@asd.com" ); // от кого отправляется почта
$m->To( "komu@asad.com" ); // кому адресованно
$m->Subject( "Тема сообщения" );
$m->Body( "Текст письма" );    
$m->Cc( "copy@asd.com"); // копия письма отправится по этому адресу
$m->Bcc( "bcopy@asd.com"); // скрытая копия отправится по этому адресу
$m->Priority(3) ;    // приоритет письма
$m->Attach( "asd.gif","", "image/gif" ) ; // прикрепленный файл
$m->smtp_on( "smtp.asd.com", "login", "password" ) ; // если указана эта команда, отправка пойдет через SMTP
$m->Send();    // а теперь пошла отправка

echo "Показывает исходный текст письма:<br><pre>", $m->Get(), "</pre>";
?>



Описание класса


Mail( [кодировка], [base64|8bit], [idna convert FALSE|TRUE] )

Начало работы с классом.
По умолчанию кодировка письма UTF-8, для отправки письма в другой кодировке укажите ее.

$mail = new Mail(); // кодировка по умолчанию
ИЛИ
$mail = new Mail("windows-1251"); // любая кодировка

Второй параметр это Content-Transfer-Encoding - нужно ли кодировать текст письма в base64 или отправлять без кодирования(8bit), открытым текстом. По умолчанию установлено base64, крайне не рекомендуется менять этот параметр, base64 наиболее удобен и оптимален для отправки почты.

// отправка письма открытым текстом. Первый параметр(кодировка) пустой, значит в данном случае кодировка будет по умолчанию UTF-8.
$mail = new Mail('','8bit');

Третий параметр idna convert включает поддержку адресов в национальных доменах (Имя.РФ и на любых других языках).
По умолчанию данная функция выключена. При включении TRUE можно отправлять почту на любые адреса, национальные и международные. Класс будет автоматически определять домены и при необходимости конвертировать их.
Если вы используете этот класс для постоянной отправки с одного и тоже адреса и на один и тот же адрес и они "обычные" - не национальные, тогда лучше не включать эту функцию для экономии оперативной памяти.


$mail = new Mail('','',true); // включение поддержки адресов в национальных доменах

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


smtp_on( smtp_server, login, password, [ port ], [ timeout ] )

Включение отправки письма через SMTP.
Если хотите отправить письмо через SMTP, используйте эту команду.
Если нет необходимости отправлять через SMTP, проигнорируйте данную команду.

  • smtp_server: для соединения с smtp по обычному протоколу указывается сервер в обычном формате, например "smtp.mail.ru".
    Для соединения с сервером по защищенному протоколу, например с gmail.com, нужно добавить перед сервером " ssl://", например "ssl://smtp.gmail.com". Так же не забудьте указать порт, для защищенных соединений он обычно 465.

  • login: логин для авторизации через smtp

  • password: пароль для авторизации smtp

  • port: порт для соединения smtp. Если порт стандартный, можно не указывать, по умолчанию 25

  • timeout: таймаут соединения. По умолчанию стоит 5 секунд. Обычно менять не нужно, но если smtp тормозной или ваш конект к серверу длиный, можно увеличить.

$mail->smtp_on("smtp.mail.ru","login","passw"); // пример стандартного соединения
ИЛИ
$mail->smtp_on("ssl://smtp.gmail.com","login","passw", 465); // пример защищенного соединения. стандартный порт изменен на 465



Subject( текст )

Тема письма.

$mail->Subject( "Привет" );

From( email )

Email от кого отправляется письмо.
Для добавления имен к адресам используйте разделитель ';' (виктор;from@asd.com)

$mail->From( "from@asd.com" );
или пример с именем
$mail->From( "сергей;from@asd.com" );

To( email )

Кому отправляется письмо.
Чтобы отправить письмо нескольким адресатам, можно в качестве входящего параметра передать массив адресов либо вызывать несколько раз эту команду.
Для добавления имен к адресам используйте разделитель ';' (виктор;to@asd.com)

// отправка одному адресату
$mail->To( "to@asd.com" );

// отправка нескольким адресатам используя массив
$to_array = array( "to1@asd.com", "to2@asd.com" );
$mail->To( $to_array );

// отправка нескольким адресатам без использования массива
$mail->To( "1@asd.com" );
$mail->To( "2@qwe.com" );


CC( email )

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

// отправка одному адресату
$mail->CC( "to@asd.com" );

// отправка нескольким адресатам используя массив
$cc_array = array( "cc1@asd.com", "cc2@asd.com" );
$mail->CC( $cc_array );

// отправка нескольким адресатам без использования массива
$mail->CC( "1@asd.com" );
$mail->CC( "2@qwe.com" );


BCC( email )

Кому оправить скрытую копию письма.
Так же как и в предыдущих командах можно отправить копию нескольким адресатам используя массив или вызывая несколько раз эту команду.

// отправка одному адресату
$mail->BCC( "to@asd.com" );

// отправка нескольким адресатам используя массив
$bcc_array = array( "to1@asd.com", "to2@asd.com" );
$mail->BCC( $bcc_array );

// отправка нескольким адресатам без использования массива
$mail->BCC( "1@asd.com" );
$mail->BCC( "2@qwe.com" );


Body( текст письма, [ text | html ] )

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

$mail->Body( "Обычный текст, никакого html нет" );
ИЛИ
$mail->Body( "Письмо в формате html. <b>Жирный</b> текст.", "html" ); // в данном примере указан формат "html"
ИЛИ
$mail->Body( 'Вот пошла первая картинка <img src="cid:1.jpg"><br>Теперь вторая <img src="cid:2.jpg"><br> И т.д.', "html" ); // пример как вставить в html прикрепленные к письму картинки.



Attach( filename, [new filename], [mimetype], [disposition] )

Прикрепление файлов к письму. Чтобы прикрепить несколько файлов нужно просто повторять команду с нужными параметрами.
Если вы прикрепляете картинки, то вы можете их вставить внутрь html письма.
Адрес картинок будет такой cid:name.jpg, для вставки в html используйте так
<img src="cid:name.jpg">
Чтобы вставлять картинки в html обязательно указывайте их mimetype(image/jpeg,image/gif...) при прикреплении файла.
  • filename : путь к файлу на диске
  • new filename : какое имя будет у файла в письме. если ничего не указать, имя файла останется оригинальным.
  • mimetype : MIME-тип файла. Если не указать, то тип будет 'application/x-unknown-content-type'.
  • disposition : команда для почтового клиента, как ему отображать вложение.
    inline (по умолчанию), при просмотре письма вложение должно отображаться непосредственно в самом теле письма, например картинка.
    attachment, вложение не будет отображаться в самом письме, оно будет как прикрепленный файл.
    Не все почтовые программы обращают внимание на этот параметр.

// при прикрепелении файла ему дается другое имя в письме. так же указан mime тип файла
$mail->Attach( "/home/path/123.gif", "logo.gif", "image/gif" );

// при прикреплении письма не указано другое имя файла, поэтому имя останется не измененным. не указан mime тип. вариант отображения в почтовом клиенте указан как прикрепленный файл
$mail->Attach( "C:/Documents/resume.doc", "", "", "attachment" );



autoCheck( boolean )

Включает/выключает проверку email адресов на валидность. По умолчанию включено.

$mail->autoCheck( false ); // проверка выключена
$mail->autoCheck( true ); // проверка включена



Organization( организация )

Поле для указания вашей организации.

$mail->Organization( "Моя фирма" );


ReplyTo( email )

на какой email можно ответить.
Для добавления имен к адресам используйте разделитель ';' (виктор;victor@asd.com)

$mail->ReplyTo( "repl@asd.com" );


Priority( приоритет )

Приоритет письма. Важность. Дает информацию адресату понять, какие письма наиболее важны.
От 1 (высокая важность) до 5 (низкая важность).
Рекомендуемый приоритет 3.

$mail->Priority( 3 );


Receipt()

Подтверждение о прочтении.
Некоторые почтовые клиенты могут отправить на обратный адрес письмо о том, что ваше сообщение получено или читается.

$mail->Receipt();


Send()

Отправка письма. После всех команд выполняется эта, она отправит письмо.
$mail->Send();


Get()

Для тестирования.
Возвращает текст письма вместе с заголовками.
Можно использовать вместо отправки письма не используя отправку Send(), возвратит текст письма и заголовки, готовые к отправке.
Если использовать после отправки письма, так же возвратит заголовки и текст, но если отправка была с помощью smtp возвратит еще и весь далог общения с сервером.
Можно сохранять в файл для ведения логов или вывести на экран.

$msg = $mail->Get(); // получение в переменную
print $msg; // вывод в браузер



Комментарии

RSS комментарии


28.07.2010 Александр
Отличный скрипт. Пользуюсь им уже давно. Спасибо автору скрипта за такое нужное дело.



06.09.2010 Алексей
+1 Просто ничего лучше в жизни не видел! :) Автору просто зачет и огромное спасибо!



08.09.2010 Петро
Привет а форму как злабадать



18.12.2010 Дамир
Спасибо автору! Нужно было отправить файлы во вложении, через эту библиотеку все получилось просто и быстро:)



02.02.2011 Владимир
Автору респект



06.02.2011 Валентин
В версии PHP 5.2 выдает ошибку на функцию ereg.
Вы делает проверку емайла на валидность этой функцией.
А почему бы не проверять с помощью
filter_var($address, FILTER_VALIDATE_EMAIL)) ??



06.02.2011 админ
Валентин, спасибо за совет, внес поправки.
версия 1.5.1 - валидация email адресов адаптирована к старым и новым версиям PHP именно с помощью filter_var()



10.02.2011 Валентин
Не за что.
Спасибо за Класс, очень полезный.



17.02.2011 Александр
Добрый день.
Спасибо за класс.
Не подскажите как прикрепить динамически созданный файл? Например, файл pdf созданный с помощью tcpdf.
Спасибо.



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



18.02.2011 Александр
Удалось отправить генерируемый pdf. Tcpdf позволяет получать документ в base64 mime multi-part



04.03.2011 MannishArt
спасибо автору больше,очень пригодилось)



04.03.2011 MannishArt
а вот хотел бы спросить,а как несколько аттачмантов сделать?



04.03.2011 Александр
Искал замену PHPMailer и вот нашёл замечательное решение. Спасибо! Сделано очень профессионально.



04.03.2011 Александр
Строка 564:
if (isset($this->smtp_log)) return $this->smtp_log; // если есть лог отправки smtp выведем его
Добавил функцию isset(), потому что без неё появлялась ошибка о необъявленном свойстве класса



05.03.2011 админ
MannishArt, чтобы несколько файлов прикрепить, просто несколько раз повторяйте команду $mail->Attach(), естественно с нужными параметрами.



05.03.2011 админ
Александр, ваш пример сработает даже в том случае, если $this->smtp_log=""
но это не много нарушает смысл этого условия.
Тогда лучше сделать так.

if(isset($this->smtp_log))
{
if ($this->smtp_log) return $this->smtp_log;
}

Спасибо за совет, я внес эту поправку в скрипт, только версию скрипта конечно не стал менять.



05.03.2011 MannishArt
Вот я написал в скрипте:
$m->Attach( "ПриходМарт(Разное).xls","", "attachment" ) ;
$m->Attach( "Mixer_march.jpg","", "attachment" ) ;
$m->Attach( "quote_march.txt","", "attachment" ) ;

А в письме приходит как:
(Разное).xls (560 Кб)
Mixer_march.jpg (2.5 Кб)
quote_march.txt (72 )
почему-то обрезается "ПриходМарт"



07.03.2011 MannishArt
а ещё можете подсказать,я отправляю из программы тему и заголовок скрипту,а в письме приходит Тема РїРёСЃСЊРјР° вот такое вот,это что-то с кодировкой?



07.03.2011 Илья
Да, возможно это проблемы с кодировкой. Попробуйте поменять, самые распространенные на данный момент это windows-1251 и UTF-8. Посмотрите в каком будет читаться и установите по умолчанию.


1 2 3 4 5 6 7 8 9

Добавить свой комментарий


Ваше имя(* обязательно)


Текст сообщения(* обязательно)









 
 
  запомнить

 
Copyright © 2003-2016 WeBi Constructor
Rambler's Top100