28.02.2010 (последний раз редактировалось 28.06.2016) сайт: http://webi.ru условия использования: бесплатно
Простой, но функциональный php класс для отправки писем.
Умеет отправлять письма с помощью SMTP, либо через стандартную функцию mail().
Можно прикреплять файлы. Полная поддержка email адресов в национальных доменах (рф и любых других).
27.11.2013 Юрий
Слал успешно через mail.ru но с 25.11.13 что-то они поменяли - не отправляется почта.
Попробовал на гмэйл и яндекс - ничего не хочет слать:
$m->smtp_on( "ssl://smtp.gmail.com","blah@gmail.com","blah", 465 , 5);
$m->smtp_on( "smtp.yandex.ru","blah","pwd", 587 , 5);
Выдает в любом случае "ошибка: соединение с сервером не прошло."
Что не так?
Через mail() письма на mail.ru просто отсекаются, а на другие сервера приходят.
10.12.2013 Александр
Отличный класс. Но есть проблема с проверкой email на валидность.
Очевидно, что эта регулярка ^[^@ ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$ не учитывает все возможные варианты email - например, зону info и т.д.
13.12.2013 Семен
Автору глубокая и искренняя благодарность!
26.12.2013 Евгений
Добрый день! Спасибо за такой прекрасный скрипт! Вопрос: при указании скрытой копии, подставляется всегда основной адрес кому отправляется письмо, как сделать, чтобы всех, кто скрыт, в поле "кому" подставлялся его адрес?
29.12.2013 Александр
Очень обрадовался, увидев, что ввели отправку многим адресатам разных писем в рамках одного соединения. Спасибо!!!
Из пожеланий, добавить соединение без авторизации (такое тоже ещё встечается:( ). Я вот тут набросал пару строк:
/**
* аутентификация на сервере
* @var boolean
* @access private
*/
private $auth = true;
/**
* Принудительное отключение включение аутентификации на сервере
* @param boolean $bool
*/
public function auth_on($bool)
{
if ($bool)
$this->auth = true;
else
$this->auth = false;
}
после блока if ($code != 250)
вставил условие:
if ($this->auth)
до блока
foreach ($this->smtpsendto as $key_res => $value_res)
13.01.2014 Александр
Думаю было бы здорово, лог вести не общий, а частичный (я просто закоментил вывод body в лог).
Из идей - иметь статус отправки каждого письма, а не только всех писем соединения.
08.03.2014 Александр
Автор великолепен!!!
30.06.2014 Валерий
Отличный сайт! Постоянно выручаете! Спасибо! Так Держать!
13.08.2014 Андрей
Александр,
поддерживаю. сейчас столкнулся с задачей рассылки писем по клиентам, было бы хорошо видеть кому именно письмо было отправлено, типа так:
$status = $m->status_mail['gds'];
$status = $m->status_mail['54'];
т.е. используя ID руссурса
а сейчас пока придется функцией очистки массива адресов и запускать в цикл. будем посмотреть :)
и, Админ, спасибо за классный скрипт - уже года три наверное :)
13.08.2014 Andrey
нашел одну интересную особенность:
если сделать:
то и само сообщение и картинка придут как вложение.
если
$m->Body($preview,"html");
$m->Attach(dirname(__FILE__).'/../logo.png', "", "image/jpeg");
то все нормально
15.08.2014 Иван
Автор, привет. Мог бы ты вот, что пояснить.
В методе Attach есть строки: "
if (strlen($new_name_filename))
$basename = basename($new_name_filename); // если есть другое имя файла, то оно будет таким
else
$basename = basename($filename); // а если нет другого имени файла, то имя будет выдернуто из самого загружаемого файла
"
То есть, если указанно новое имя, то мы пытаемся получить имя файла? Правильно ли я понимаю?
18.08.2014 фывйцу
Очень похоже на этот http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en
20.08.2014 Андрей
Иван,
я не админ, но отвечу :)
если есть новое имя, то во вложении ваш файл будет под этим именем,
а если нового имени нет, то у вложенного файла будет имя которое имеет файл.
например, у меня на сервере все пользовательские файлы хранятся в виде:
1403117398Y7OPz
1403122003mP1sb
1403125053A4JiS
1403125053O29pY
т.е. даже без расширения. и есть база в которой прописаны имена файлов - какие они должны быть и под какими хранятся на диске.
не могу же я послать клиенту файл с именем "1403125053A4JiS", поэтому я указываю новое имя, типа "запусти меня.ехе" :)
26.08.2014 Александр
Оч крутой скрипт.
но у меня косяк выходит когда отправляю файл в Attach...
include "libmail.php"; // вставляем файл с классом
$m= new Mail; // начинаем
$m->From("diyanchic@yandex.ru"); // от кого отправляется почта
$m->To($_POST['mail']); // кому адресованно
$m->Subject("Тема сообщения");
$m->Body("Текст письма");
//$m->Cc( "copy@asd.com"); // копия письма отправится по этому адресу
//$m->Bcc( "bcopy@asd.com"); // скрытая копия отправится по этому адресу
$m->Priority(1) ; // приоритет письма
$m->log_on(true);
$m->Organization("Моя фирма");
$m->Body($preview,"html");
$m->Attach("libmail.rar","","application/zip","attachment");
$m->Send();
Где косяк?
12.09.2014 Александр
Пожалуйста, дайте пример, как за одно соединение с SMTP отправлять разные сообщения нескольким адресатам.
21.09.2014 Дмытро
Здраствуйте, у меня возникла вот такая проблема. Когда подключаю даний с помощью reqire_once то неотображается русский текст. Хочу отметить что проблема возникает именно в этом случае и дело не в установленой кодировке. Если код отправки расположен в одном файле с классом то все нормально. Помогите пожалуйста решить такую проблему.
11.10.2014 Сергей
Здравствуйте. В комментариях в php коде идет речь о "ресурсах" и письмах для различных "ресурсов". Не могли бы вы подробнее рассказать, для чего это нужно как задать имя ресурса и т.д.
19.10.2014 Владимир
Класс просто замечательный! Как нашел его только его и использую.
03.11.2014 Александр
Большое спасибо за скрипт!
+ небольшая просьба: не используйте private методы/свойства. Приходится менять в библиотеке!
Было бы класно дабавить метод:
public function resetRecipientsList()
{
$this->sendto = array();
$this->acc = array();
$this->abcc = array();
return $this;
}
06.11.2014 Plasha
А как сделать чтобы в поле от кого я мог указать Максим petya@gmail.com ???