Заметили ошибку ?
Выделите это место и нажмите Ctrl + Q

Отправка почты через SMPT на PHP


Сегодня разберём как отправить письмо с помощью PHP через SMPT. Электронные письма от стандартной функции mail в php могут попадать в спам. Это связанно с неверными настройками отправляемого письма, с подозрительными заголовками, а так же ip сервера, с которого отправляется e-mail, может числится в чёрных листах.


Эту проблему можно решить, отправляя письмо с помощью SMPT. Сервер и пароль для отправки почты можно узнать у своего хостинга, либо использовать известные сервера, предоставляющие услуги электронной почты (Yandex, GOOGle и т.д. ). Правда у бесплатных серверов существуют ограничения на количество отправляемых писем (Которые можно узнать в документации у самих почтовых компаний.)


Класс отправки писем через SMPT на PHP.


class SendMailSmtpClass {

public $smtp_username;
public $smtp_password;
public $smtp_host;
public $smtp_from;
public $smtp_port;
public $smtp_charset;

public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") {
	$this->smtp_username = $smtp_username;
	$this->smtp_password = $smtp_password;
	$this->smtp_host = $smtp_host;
	$this->smtp_from = $smtp_from;
	$this->smtp_port = $smtp_port;
	$this->smtp_charset = $smtp_charset;
}
/**
* Отправка письма
*
* @param string $mailTo - получатель письма
* @param string $subject - тема письма
* @param string $message - тело письма
* @param string $headers - заголовки письма
*
* @return bool|string В случаи отправки вернет true, иначе текст ошибки *
*/
function send($mailTo, $subject, $message, $headers) {
		$contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n";
		$contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=\r\n";
		$contentMail .= $headers . "\r\n";
		$contentMail .= $message . "\r\n";
	try {
			if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
			throw new Exception($errorNumber.".".$errorDescription);
		}
		if (!$this->_parseServer($socket, "220")){
			throw new Exception('Connection error');
		}
		fputs($socket, "HELO " . $this->smtp_host . "\r\n");
		if (!$this->_parseServer($socket, "250")) {
			fclose($socket);
			throw new Exception('Error of command sending: HELO');
		}
		fputs($socket, "AUTH LOGIN\r\n");
		if (!$this->_parseServer($socket, "334")) {
			fclose($socket);
			throw new Exception('Autorization error');
		}
		fputs($socket, base64_encode($this->smtp_username) . "\r\n");
		if (!$this->_parseServer($socket, "334")) {
			fclose($socket);
			throw new Exception('Autorization error');
		}
		fputs($socket, base64_encode($this->smtp_password) . "\r\n");
		if (!$this->_parseServer($socket, "235")) {
			fclose($socket);
			throw new Exception('Autorization error');
		}
		fputs($socket, "MAIL FROM: ".$this->smtp_username."\r\n");
		if (!$this->_parseServer($socket, "250")) {
			fclose($socket);
			throw new Exception('Error of command sending: MAIL FROM');
		}
		fputs($socket, "RCPT TO: " . $mailTo . "\r\n");
		if (!$this->_parseServer($socket, "250")) {
			fclose($socket);
			throw new Exception('Error of command sending: RCPT TO');
		}
		fputs($socket, "DATA\r\n");
		if (!$this->_parseServer($socket, "354")) {
			fclose($socket);
			throw new Exception('Error of command sending: DATA');
		}
		fputs($socket, $contentMail."\r\n.\r\n");
		if (!$this->_parseServer($socket, "250")) {
			fclose($socket);
			throw new Exception("E-mail didn't sent");
		}
		fputs($socket, "QUIT\r\n");
		fclose($socket);
	} catch (Exception $e) {
	return $e->getMessage();
	}
	return true;
}
private function _parseServer($socket, $response) {
	while (@substr($responseServer, 3, 1) != ' ') {
		if (!($responseServer = fgets($socket, 256))) {
			return false;
		}
	}
	if (!(substr($responseServer, 0, 3) == $response)) {
		return false;
	}
		return true;
}
}

Вызываем класс с параметрами

require_once "SendMailSmtpClass.php"; // подключаем класс
$mailSMTP = new SendMailSmtpClass('zzz@yandex.ru', '****', 'smtp.yandex.ru', 'Admin'); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: Evgeniy \r\n"; // от кого письмо
$result = $mailSMTP->send('xxxx@yandex.ru', 'Тема письма', 'Текст письма', $headers); // отправляем письмо
// $result = $mailSMTP->send('Кому письмо', 'Тема письма', 'Текст письма', 'Заголовки письма');
if($result === true){
echo "Письмо успешно отправлено";
}else{
echo "Письмо не отправлено. Ошибка: " . $result;
}

Скачать класс PHP для отправки письма через через SMPT

Счастливого программирования!


15-09-2016 в 10:48:22





Если у Вас что-то не получилось или Вы не имеете достаточных навыков по программированию, но ВСЁ РАВНО хотите данный скрипт к себе на сайт - можете обратится ко мне за помощью, и я Вам помогу!
Хочу такой скрипт к себе на Сайт

Похожая статья:

Передача массива через сессии

Задача: Пусть есть массив $arr, определённый на странице 1.php. Отобра...

Категория: PHP  Подкатегория: Задачи
Дата: 15-01-2018 в 16:47:34 1



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота:

Ответ:


Последние
видео:



Шейкер-сортировка (С#)
ОГЭ по информатике. Задание 18


Подготовка к
ОГЭ


Подготовка к ОГЭ по информатике


Давайте
дружить!


Группа Вконтакте Code-Enjoy

Твиттер Александра Калужского

YouTube канал Code-Enjoy