PHPmailer – отправка писем через SMTP

Сегодня пришло первое письмо в 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.
Пример можно скачать здесь.