Универсальный Php класс для отправки писем через SMTP, либо через стандартную php функцию mail().
Достаточно функциональный и простой в использовании.
Основные возможности:
Отправка письма с помощью SMTP, либо через mail() по вашему выбору
Отправка прикрепленных к письму файлов (любое количество)
Возможности отправки многим адресатам через To, CC или BCC
Возможность получить исходный текст письма без отправки, либо после отправки для ведения логов. При отправке через SMTP возращает весь диалог общения с сервером
Проверка синтаксиса email адресов
Возможность установить запрос о прочтении письма
Отправка писем в текстовом формате или в 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( [кодировка] )
Начало работы с классом.
По умолчанию кодировка письма windows-1251, для отправки письма в другой кодировке укажите ее.
$mail = new Mail(); // кодировка по умолчанию
ИЛИ
$mail = new Mail("utf-8"); // любая кодировка
Включение отправки письма через 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" );
// отправка нескольким адресатам без использования массива
$mail->To( "1@asd.com" );
$mail->To( "2@qwe.com" );
CC( email )
Кому отправить копию письма.
Чтобы отправить копию нескольким адресатам, можно в качестве входящего параметра передать массив адресов либо вызывать несколько раз эту команду.
// отправка одному адресату
$mail->CC( "to@asd.com" );
// отправка нескольким адресатам без использования массива
$mail->CC( "1@asd.com" );
$mail->CC( "2@qwe.com" );
BCC( email )
Кому оправить скрытую копию письма.
Так же как и в предыдущих командах можно отправить копию нескольким адресатам используя массив или вызывая несколько раз эту команду.
// отправка одному адресату
$mail->BCC( "to@asd.com" );
// отправка нескольким адресатам без использования массива
$mail->BCC( "1@asd.com" );
$mail->BCC( "2@qwe.com" );
Body( текст письма, [ text | html ] )
В эту команду помещается текст письма. По умолчанию письмо формируется обычным текстовым, для отправки письма в формате html нужно нужно указать это во втором параметре.
$mail->Body( "Обычный текст, никакого html нет" );
ИЛИ
$mail->Body( "Письмо в формате html. <b>Жирный</b> текст.", "html" ); // в данном примере указан формат "html"
Прикрепление файлов к письму. Чтобы прикрепить несколько файлов нужно просто повторять команду с нужными параметрами.
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 адресов на валидность. По умолчанию включено.
на какой 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; // вывод в браузер
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. Посмотрите в каком будет читаться и установите по умолчанию.