28.02.2010 (последний раз редактировалось 28.06.2016) сайт: http://webi.ru условия использования: бесплатно
Простой, но функциональный php класс для отправки писем.
Умеет отправлять письма с помощью SMTP, либо через стандартную функцию mail().
Можно прикреплять файлы. Полная поддержка email адресов в национальных доменах (рф и любых других).
20.10.2011 Иван
Попробовал из почтовой программы, отправляется с яндекса. вставляю эти же данные в скрипт, не работает. вставляю майлру, работает. В чем может быть дело? На яндексе такое же смтп с 25 портом (так в почтовой программе настроено).
20.10.2011 виктор
Иван, посмотрите лог общения с сервером при отправке.
Это делается примерно так
print $mail->Get();
В браузере должно показаться общение с сервером и исходник письма.
Тут и будет видна ошибка.
20.10.2011 Иван
К сожалению я не понял куда прописать print $mail->Get();
Проверял "методом тыка". Ставлю в СМТП данные mail.ru - уходит (без ошибок). Ставлю данные yandex.ru - не уходит совсем.
Скрипт в ответ пишет:
Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.yandex.ru:25 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. ) in Z:\home\myphp.ru\www\2\libmail.php on line 243
Warning: fclose(): supplied argument is not a valid stream resource in Z:\home\myphp.ru\www\2\libmail.php on line 244
Исходный текст письма:
соединение с сервером не прошло
24.10.2011 Паша
Скрипт наверное хороший но опишите подробно как его установить.
Что куда вставлять и какие файлы создавать. php html.
подскажите пожалуйста.
31.10.2011 виктор
иван, ну вобщем то логи смотреть и смысла нет.
ошибка возникает еще не стадии подключения.
По какой-то причине просто не может произойти подключение к яндексу.
Это дело не в скрипте, может ip сервера не нравится яндексу и он его отклоняет.
Если сможете решить эту проблему, сообщите, что было...
31.10.2011 виктор
Паша, это не скрипт, это класс для разработчиков.
На него еще много чего надо навешивать, чтобы он начал работать.
16.11.2011 JoHn
Скрипт Очень понравился. Но у меня почемуто с яндексом не срастается. Помогите пожалуйста решить:
Письмо отправлено:<br>220 smtp1.mail.yandex.net (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)
Я: MAIL FROM:<здесь@мой.емайл> SIZE=15797
553 5.7.1 Sender address rejected: not owned by auth user.
сервер отказал в команде MAIL FROM
Пробовал отправить от самого себя и от других. Как решить проблему, помогите... плииииз...
25.11.2011 Владимир
Не понятно как добавить Имя отправителя, пробовал так <Имя отправителя> info@mail.ru не работает, пробовал Organization как то так тоже ничего.
25.11.2011 Ник Ник
Все работает на 5+ Единственный момент, который хотелось бы прояснить, это есть ли возможность отправки через соксы? Сейчас есть уже готовые классы по этому делу, но вот как внедрить это в скрипт - х.з.
28.11.2011 Виктор
Через соксы(прокси) отправлять не умеет.
Добавлять имя отправителя в виде <Имя отправителя> info@mail.ru пока тоже не умеет, но обещали сделать.
А что касается отправки почты на яндекс, а через другие сервера уходит нормально?
07.12.2011 Artem
Спасибо автору за действительно великолепный скрипт!
09.12.2011 Админ
25.11.2011 Владимир
Не понятно как добавить Имя отправителя...
--------
Выложил новую версию 1.6.0, добавил как раз такую возможность.
Можно добавлять имена отправителя, получателя и для поля Reply-To
12.12.2011 Константин
Да, я тоже подтверждаю, что на яндекс не уходит, пишет что неправильный логин или пароль(Error: authentication failed: Invalid user or password! не правильный пароль). Может там кодирование другое... не base64?
19.12.2011 Виктор
JoHn, ваша ошибка отправки через яндекс заключается в FROM.
В поле FROM нужно обязательно указывать тот ящик, через который авторизовались.
Это условие яндекса, mail.ru и вобщем то почти все нормальные почтовики не отправят почту если from отличается от авторизованного ящика.
19.12.2011 Виктор
Константин, ваши проблемы с яндексом связаны исключительно с неверным паролем или логином.
Через яндекс почта уходит, я сам лично проверял пару недель назад этот скрипт через яндекс.
28.12.2011 XES
При отправки письма не стераются данные to при отправке в цикле они накапливаются в переменной to.
28.12.2011 Xes
foreach($email as $to){
ob_start();
require(FILE_MESSAGE);
$message = ob_get_clean();
$subject = 'Gooooo';
$m->From($account['login']);
$m->To($to);
$m->Subject($subject);
$m->smtp_on($account['smtp'], $account['login'], $account['pass'], $account['port']);
$m->Body($message);
$m->Send();
if($m->smtp_log){
$temp = 'Ошибка. При отправки письма на '.$to.' возникли ошибки: '.$m->smtp_log."\n".'Host: '.$_SERVER['HTTP_HOST'].' ['.date("Y-m-d H:i:s").']';
echo $temp.'<br />';
WriteFile(FILE_LOG_PHPMAIL, $temp."\n");
}
02.01.2012 виктор
Xes, вы странно все делаете.
Переменная TO конечно копит адреса.
Можно добавлять в нее адреса несколько раз или сразу массив адресов можно передать.
В ней копятся адреса, после чего происходит отправка один раз всех накопившихся адресов.
Вы же в цикле перебираете массив адресов и на каждом шаге добавляете в ней адреса и на каждом шаге проходите авторизацию smtp и отправляете письмо на все адреса которые уже накопились.
Либо сначала копите адреса в этой переменной или один раз массив в нее передеайте и лишь один раз сделайте авторизацию и отправку письма по всем этим адресам.
Либо если вам нужен именно ваш подход, тогда уж обнуляйте переменную to каждый раз после отправки.
03.01.2012 Дима
Нужно прикрутить к файлам Content-id и поставить Content-Type: multipart/related; - иначе у меня картинки не подгружались в тело письма. А так ваще супер.
04.01.2012 Сергей
Оч хороший скриптик. столкнулся с ситуацией отправки картинки в тексте самого письма, на компе в почтовике картинка отображается, а в веб интерфейсе нет, тупо пустое место. Как решить данную проблему???