Сегодня пришло первое письмо в Helper:
Name: zeleboba Email: zelebb@gmail.com Сайт: http://www.knigoobzor.ru Ваша проблема: Проблема с сайтом knigoobzor.ru. Сейчас там дделываю возможность оставлять комменты к статьям. Хочу сделать возможность подписки и уведомления меня(админа) о том, что кто-то новый коммент оставил. Проблема состоит в том, что на хостинге сайта запрещено использование mail();. Можно ли реализовать отправку через smtp, например Яндекса? Намекни как. Или где почитать про это. Знаю, что есть плагины для wordpress, которые это делают, значит и для обычного сайта можно.
Данный класс предназначен для отправки почты с помощью php, если по каким-то причинам, от вас не зависящим, вы не можете использовать функцию mail(). Если же вы можете использовать mail() (возможность должа быть включена на сервере в конфигурации php), то можно лучше использовать её. Здесь же можно посмотреть на синтаксис команды mail: линк.
Мы будем использовать библиотеку PHPMailer (официальный сайт).
Закачав PHPMailer на сервер мы можем начинать работать. Создадим конфигурационный файл config.php:
<?php $__smtp = array( "host" => "smtp.yandex.ru", //smtp сервер "debug" => 2, //отображение информации дебаггера (0 - нет вообще) "auth" => true, //сервер требует авторизации "port" => 25, //порт (по-умолчанию - 25) "username" => "%username%",//имя пользователя на сервере "password" => "%password%",//пароль "addreply" => "your@email.com",//ваш е-mail "replyto" => "your@email.com" //e-mail ответа ); ?>
Теперь используем класс PHPMailer для отправки письма с авторизацией на SMTP сервере. Я создам отдельную функцию, которая будет отправлять письмо на определенный e-mail:
<?php function smtpmail($to, $subject, $content, $attach=false) { require_once('config.php'); //путь до конфигурационного файла для вашего smtp сервера require_once('class.phpmailer.php'); //путь до класса phpmailer $mail = new PHPMailer(true); $mail->IsSMTP(); try { $mail->Host = $__smtp['host']; $mail->SMTPDebug = $__smtp['debug']; $mail->SMTPAuth = $__smtp['auth']; $mail->Port = $__smtp['port']; $mail->Username = $__smtp['username']; $mail->Password = $__smtp['password']; $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']); $mail->AddAddress($to); //кому письмо $mail->SetFrom($__smtp['addreply'], $__smtp['username']); //от кого (желательно указывать свой реальный e-mail на используемом SMTP сервере $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']); $mail->Subject = htmlspecialchars($subject); $mail->MsgHTML($content); if($attach) $mail->AddAttachment($attach); $mail->Send(); echo "Message sent Ok!</p>\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); } catch (Exception $e) { echo $e->getMessage(); } } ?>
Думаю, что разбирать каждую функцию разбирать безсмысленно из-за понятности по названию. Хочется добавить, что в официально версии есть много примеров (работа с ssl, pop3 прежде smtp, работа с gmail и тд). Мы разобрали самый простой и самый распространенный вариант отправки писем через smtp средствами php.
Пример можно скачать здесь.
Большое спасибо)
Сейчас пойду пробовать)
Через яндекс работает отменно :) Кстати, у тебя дизайн плывет на книгообзоре, если ввести в адрес что-то типа этого =]
И, да. Библиотека PHPMailer просто включена в WordPress (/wp-includes/class-phpmailer.php).
А там просто не WordPress =) Там мой самопал, написанный мной с нуля в целях постижения и тренировки в php =)
Поподробнее почитай про htaccess и про ЧПУ =] Быть может получится рещить эту проблемку =]
Угу, идея уже есть в голове. Нужно себя заставить сделать)
Fixed.
PHPmailer много где используется, если я не ошибаюсь, то соотв. модуль в Друпале есть.
Ога, есть такое
У тебя в блоке try { } дублируется 2 раза строки:
$mail->Host = $__smtp[‘host’];
Подправил + fix верстки. Спасибо!
не могу понять, оправляю письмо, в ответ пишет Invalid address:
Проверяйте smtp адрес сервера, логины и пароли и правила авторизации на серверах.
В чем может быть проблема?
1) http://www.ip-cci.by/
2) http://belpatent.faberstudio.by/
Два одинаковых сайта, расположены на разных хостах, первый вариант при отправке письма в онлайн заказе, не выдает ошибку пишет письмо успешно отправлено, но письмо на емайл не приходит
Во втором варианте всё нормально, пишет письмо успешно отправленно и тут же на емайл приходит письмо, в чем может быть дело?
Пробовал даже через SMTP опять же пишет письмо отправленно, на почте пусто!
Быть может просто на сервере на котором проблема с отправлением заблокирован 25 порт провайдером в целях безопасности и уменьшения количества распространения спама? Проверьте это обратившись к своему провайдеру (хостеру).
Да спасибо, именно в этом и была проблема, жаль что так поздно ответили :) Может кому другому поможет, я реализовал через SMTP отправку писем
отличный класс, только для повседневных задач в нем слишком много лишнего.
Вот только в функции smtpmail() везде прописан addreply даже где должно быть происано replyto
скачал пример, все как указано в статье сделал, ругается на строке “try {“: Parse error: parse error in *\index.php on line 10
Какой php у вас на сервере установлен?
Привет всем, а как сделать рассылку по бд. Ну как реализовать, скажем выборку адресов из бд и натравить на них (на получателей) phpmailer.
В Вашем примере одиночная отправка; Меня интересует как сделать тоже самое только многим польчателям.
Напишите свой скрипт, который будет в цикле использовать данный скрипт. Кстати, при массовой рассылке есть большой процент, что ваш провайдер (владелец хостинга) забанит вас за спам.
Пишет просто “Invalid address:” попробывал на яндексе и на mail.ru Никаго результата. Из чего может быть? Может ваш код уже устарел?
Добрый вечер, выдает ошибку
SMTP -> ERROR: Failed to connect to server: Попытка установить соединение была безуспешной (10060)
SMTP Error: Could not connect to SMTP host.
Настроено вот так:
“smtp.yandex.ru”,
“debug” => 2,
“auth” => true,
“port” => 25,
“username” => “**”,
“password” => “**”,
“addreply” => “**@yandex.ru”,
“replyto” => “**@yandex.ru”
);
?>
раскомментировал в php.ini строчку extension=php_openssl.dll, не дало результатов.
но в отправленных нифига нет! как сделать чтоб в отправленных письмо находилось????????
Где можно купить майлер? ??
очень важно))
Зачем покупать то что бесплатно?
Привет! шлёт на ура! Спасибо! но на моём сайте imper.tk при отправке выводит 2014-12-16 18:21:41 SERVER -> CLIENT: 220 smtp1m.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru) 2014-12-16 18:21:41 CLIENT -> SERVER: EHLO imper.tk 2014-12-16 18:21:41 SERVER -> CLIENT: 250-smtp1m.mail.yandex.net 250-8BITMIME 250-PIPELINING 250-SIZE 42991616 250-AUTH LOGIN PLAIN 250-DSN 250 ENHANCEDSTATUSCODES 2014-12-16 18:21:41 CLIENT -> SERVER: и ещё дофига. Я так понимаю это ход операции. Вопрос А как его скрыть?
почему функция smtp Отправляет 2 письма вместо одного, недоработка phpmailer?
Скажите с чем может быть связана вот такая ошибка при попытки отправить письмо
“SMTP ERROR: Failed to connect to server: Connection refused (111) 2015-08-19 11:45:20 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting ne okSMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting”
работаю через gmail, пробовал через mail.ru – все тоже.
Помогите пожалуйста, что не так может быть?
Ошибка при попытке соединения. Отказ в соединении. Проверьте включен ли у вас SMTP в настройках почтового ящика и проверьте порт, который вы используете при подключении к удаленному серверу. Должно помочь.
Плюс ещё у GMAIL всё давно через SSL. Порт, ЕМНП, 993 или 995. Указывайте порт при подключении и всё должно заработать.
После переноса сайта на новый хостинг перестала работать форма:
Invalid address: in class.phpmailer.php on line 857
Подскажите пожалуйста, что это может быть?
Добрый день!
После переезда на новый хостинг перестала отправляться информация. Т.е. письма не доходят совсем. Подскажите, в чем может быть проблема? Куда копать?
Проверяйте /var/log/maillog – там все сказано. Если юзаете phpmailer – уточняйте у хостера – разрешен ли у него 25 порт.
За инструкцию спасибо, а страничка эта либо с вируснёй либо майнит биткойны без разрешения, потому что загрзка процессора на ней 146%
Спасибо за сигнал. Почистил вордпресс.