Сегодня пришло первое письмо в 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) www.ip-cci.by
2) belpatent.faberstudio.by
Два одинаковых сайта, расположены на разных хостах, первый вариант при отправке письма в онлайн заказе, не выдает ошибку пишет письмо успешно отправлено, но письмо на емайл не приходит
Во втором варианте всё нормально, пишет письмо успешно отправленно и тут же на емайл приходит письмо, в чем может быть дело?
Пробовал даже через SMTP опять же пишет письмо отправленно, на почте пусто!
Быть может просто на сервере на котором проблема с отправлением заблокирован 25 порт провайдером в целях безопасности и уменьшения количества распространения спама? Проверьте это обратившись к своему провайдеру (хостеру).
Да спасибо, именно в этом и была проблема, жаль что так поздно ответили :) Может кому другому поможет, я реализовал через SMTP отправку писем