Подтверждение адреса электронной почты на PHP | PHP

How to debug smtp problems in phpmailer

If you experience some troubles when sending emails through an SMTP server, the SMTPDebug command will help you explore those errors and find out what should be fixed.

Enable SMTP debugging and set the debug level in your script as follows:

$mail->SMTPDebug = 2;
level 1 = client; will show you messages sent by the client
level 2  = client and server; will add server messages, it’s the recommended setting.
level 3 = client, server, and connection; will add information about the initial information, might be useful for discovering STARTTLS failures
level 4 = low-level information. 
Use level 3 or level 4 if you are not able to connect at all. Setting level 0 will turn the debugging off, it is usually used for production. 

For a better understanding of how debugging in PHPMailer works, let’s review a couple of examples.

Example1. Invalid SMTP hostname

How to install phpmailer

Up to version 5, PHPMailer was providing “PHPMailerAutoload.php” file, so it was required just to include it in your script and create a PHPMailer instance.Starting from PHPMailer 6.0 release in August 2022, you need to install it, preferably via Composer, a dependency manager for PHP (this way is recommended by PHPMailer’s creators on Github). After installing Composer, add this line to your composer.json file:

"phpmailer/phpmailer": "~6.0"

or run

composer require phpmailer/phpmailer

If you don’t want to install Composer, for example, while working within a testing environment, you can download files with PHPMailer source code, then copy the contents of the PHPMailer folder to one of the include_path directories specified in your PHP configuration, and load each class file manually:

Adding Exception class will help you handle errors and debug them. In PHP it works similarly to the other programming languages. So, without it, if there is an error in your email sending code, you will just see a message saying Exception class is not found, but you won’t be provided with any details on how to debug it. I will describe debugging is a separate section of this post.

To see detailed instructions on installation, check PHPMail documentation on Github.

Php built-in mail function ()

There are two basic ways of sending emails with PHP: built-in mail function and external mail packages.

PHP’s built-in mail function () is very simple but at the same time, it provides a limited functionality for sending emails. You won’t be able to add attachments to your email, and building a beautiful HTML template with embedded images will be a tricky task as well.

Phpmailer

PHPMailer is the classic email sending library for PHP. It supports several ways of sending email messages such as mail(), Sendmail, qmail, and direct dispatch to SMTP servers. Besides, it provides a list of advanced features:

  • SMTP authentication
  • Secure/MIME encryption
  • Support of TLS and SSL protocols
  • HTML content along with plain text
  • Multiple fs, string, and binary attachments
  • Embedded images support.

Smtp configuration

To test PHP mail functionality, I will use Mailtrap, a fake SMTP server, not to flood our inboxes or even worse, the inboxes of our customers. Once you make sure that everything works properly and your email messages look right, you will easily be able to substitute the SMTP settings in our examples with your real server’s, whether you prefer a local one or a third-party service, like Gmail.

If you are not using Mailtrap yet, create a free account , go to your Inbox and copy the following values from the SMTP settings tab to your PHPMailer script:

Smtp пример, простой отправки письма!?

Денис Котляров: UniSender, это так не задумываясь, пару лет назад видел у них бесплатные рассылки, а сейчас так и вовсе должно быть такого много.

Свой сервер рассылок, для неспециализированного ресурса это минус. Когда почтовику приходит письмо с нового сервера, оно идет всегда в спам, и неважно сколько успешных проверок проходит это письмо. Даже гугл отправляет в спам, а некоторые постовые сервисы и вовсе не отображают пользователю такие письма, даже в спаме.

На стандартном хостинге такой проблемы нет, там почта идет через сервер хостера не первый год, но раз вы говорите о своем smtp, то проблем не избежать точно.

Smtp с авторизацией по протоколу ssl. яндекс

При работе с почтальонами Яндекс ни чего не изменилось, но, при обращении к классу, требуется указывать ссылку на хост, работающий через SSL. Так же изменился номер порта: раньше был 25, теперь используется 465. Код отправки выглядит вот так:

require_once «SendMailSmtpClass.php»; // подключение класса

Отправка писем через smtp авторизацию сокетами на php

Давно искал решение, чтобы отправлять письма пользователям не через функцию mail() в PHP, а через SMTP почтовых серверов. В интернете информации разнообразной не так много, а то что есть — работает не совсем так, либо вообще не работает. Поэтому я собрал все во едино и написал свой код, основываясь на уже готовые, которые представлены на сайтах.

Похожее:  laravel-docs-ru/sanctum.md at 9.x · russsiq/laravel-docs-ru · GitHub

У меня ответ довольно простой — какое-то время через мой сервер вирусяки отправляли тонны писем, что привело в БАНу моего IP-адреса у многих почтовиков, в частности у gmail.com, а в связи с этим пользователи могли получать письма, поэтому пришлось искать альтернативу, и я ее нашел — это SMTP

Возможно, вас заинтересует, чем же мой скрипт лучше других, которые валяются на просторах?! Отвечу

  1. Он работает с почтой yandex, rambler, mail (gmail победить не смог)
  2. Понятный код. Чтобы его настроить достаточно поменять несколько строчек
  3. Отправляет письма в HTML формате

Вот достоинства моего скрипта, коих я не нашел каком-либо в интернете, но из каждого я взял все необходимо. И так, давайте рассмотрим код.

function smtpmail($mail_to, $subject, $message, $service='yandex') {
    
    $config['smtp_charset']  = 'windows-1251';  //кодировка сообщений. (или UTF-8, итд)
	$config['smtp_from']     = 'mashintop.ru'; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого"
	$config['smtp_debug']   = false;  //Если Вы хотите видеть сообщения ошибок, укажите true вместо false
	$config['smtp_port']     = '25'; // Порт работы. Не меняйте, если не уверены.
	
	if($service=='yandex')
		{
			$config['smtp_searcher'] = 'yandex.ru';
			$config['smtp_email'] = 'mashintop@yandex.ru';
			$config['smtp_username'] = 'mashintop';  //Смените на имя своего почтового ящика.
			$config['smtp_host']     = 'smtp.yandex.ru';  //сервер для отправки почты
			$config['smtp_password'] = 'moi_parol';  //Измените пароль
		}
	elseif($service=='rambler')
		{
			$config['smtp_searcher'] = 'rambler.ru';
			$config['smtp_email'] = 'mashintop@rambler.ru';
			$config['smtp_username'] = 'mashintop';  //Смените на имя своего почтового ящика.
			$config['smtp_host']     = 'smtp.rambler.ru';  //сервер для отправки почты
			$config['smtp_password'] = 'moi_parol';  //Измените пароль
		}
	elseif($service=='mail')
		{
			$config['smtp_searcher'] = 'mail.ru';
			$config['smtp_email'] = 'mashintop@mail.ru';
			$config['smtp_username'] = 'mashintop';  //Смените на имя своего почтового ящика.
			$config['smtp_host']     = 'smtp.mail.ru';  //сервер для отправки почты
			$config['smtp_password'] = 'moi_parol';  //Измените пароль
		}
	elseif($service=='gmail')
		{
			$config['smtp_searcher'] = 'gmail.com';
			$config['smtp_email'] = 'alexeybertram@gmail.com';
			$config['smtp_username'] = 'alexeybertram';  //Смените на имя своего почтового ящика.
			$config['smtp_host']     = 'smtp.gmail.com';  //сервер для отправки почты
			$config['smtp_password'] = 'moi_parol';  //Измените пароль			
		}	
	
	
	
    $header="Date: ".date("D, j M Y G:i:s")."  0700rn";
	$header.="From: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode(''.$config['smtp_from'].'')))."?= <".$config['smtp_email'].">rn";
	$header.="X-Mailer: The Bat! (v3.99.3) Professionalrn";
	$header.="Reply-To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode(''.$config['smtp_from'].'')))."?= <".$config['smtp_email'].">rn";
	$header.="X-Priority: 3 (Normal)rn";
	$header.="Message-ID: <172562218.".date("YmjHis")."@".$config['smtp_searcher'].">rn";
	$header.="To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('')))."?= <$mail_to>rn";
	$header.="Subject: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode(''.$subject.'')))."?=rn";
	$header.="MIME-Version: 1.0rn";
	$header.="Content-Type: text/html; charset=windows-1251rn";
	$header.="Content-Transfer-Encoding: 8bitrn";
	

	$smtp_conn = fsockopen("".$config['smtp_host']."", $config['smtp_port'],$errno, $errstr, 10);
	if(!$smtp_conn) {print "соединение с серверов не прошло"; fclose($smtp_conn); exit;}
	$data = get_data($smtp_conn);
	
	fputs($smtp_conn,"EHLO ".$config['smtp_searcher']."rn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 250) {print "ошибка приветсвия EHLO"; fclose($smtp_conn); exit;}
	
	fputs($smtp_conn,"AUTH LOGINrn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,base64_encode("".$config['smtp_username']."")."rn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 334) {print "ошибка доступа к такому юзеру"; fclose($smtp_conn); exit;}


	fputs($smtp_conn,base64_encode("".$config['smtp_password']."")."rn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 235) {print "не правильный пароль"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,"MAIL FROM:".$config['smtp_email']."rn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 250) {print "сервер отказал в команде MAIL FROM"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,"RCPT TO:".$mail_to."rn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,"DATArn");
	$code = substr(get_data($smtp_conn),0,3000);
	if($code != 354) {print "сервер не принял DATA"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,$header."rn".$message."rn.rn");
	$code = substr(get_data($smtp_conn),0,3000);
	
	if($code != 250) {print "ошибка отправки письма"; fclose($smtp_conn); exit;}

	fputs($smtp_conn,"QUITrn");
	fclose($smtp_conn);
}


function get_data($smtp_conn)
	{
		$data="";
		while($str = fgets($smtp_conn,515))
			{
				$data .= $str;
				if(substr($str,3,1) == " ") { break; }
			}
		return $data;
	}

$text_email = '<html><head></head><body>
Вы только что добавили объявление на сайте mashintop.ru. 
Посмотреть его можно <a href="https://mashintop.ru/announcement_number.php?id='.$myrow['id'].'">здесь</a><br>
Ваш ключ: '.$key.'<br><br>                                                        
С помощью данного ключа вы сможете управлять своим объявлением.<br><br>';
$text_email .= '        
</body></html>';
                                        
smtpmail('komu_otpravim_pismo@yandex.ru', 'Ключ от объявления на mashintop.ru', $text_email, 'yandex'); //используем яндекс
smtpmail('komu_otpravim_pismo@yandex.ru', 'Ключ от объявления на mashintop.ru', $text_email, 'mail'); //используем майл
smtpmail('komu_otpravim_pismo@yandex.ru', 'Ключ от объявления на mashintop.ru', $text_email, 'rambler'); //используем рамблер
smtpmail('komu_otpravim_pismo@yandex.ru', 'Ключ от объявления на mashintop.ru', $text_email, 'gmail'); // а вот gmail не работает :(

Вот и все, готовый скрипт у вас в руках, только скопируйте, поменяйте значения массива $config и все будет отлично работать.

Теперь давайте разберем некоторые элементы, на которые я бы хотел заострить внимание.

Нарпимер, ошибку, которую мы получаем при попытке отправить через SMTP гугл. Изначально мы видим вот такой вот текст ошибки:

сервер не разрешил начать авторизацию

Чтобы увидеть что-то более конкретное, давайте немного видоизменим код

fputs($smtp_conn,"AUTH LOGINrn");
$code = substr(get_data($smtp_conn),0,3000);
echo $code;
if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}

И получаем в итогде вполне конкретную ошибку

530 5.7.0 Must issue a STARTTLS command first. x4sm16408296lbn.2 – gsmtp

Что она означает точно — я не знаю, но полагаю, что связанно что-то с защищеннымнезащищенным подключением. Как от нее избавиться — пока не знаю, поэтому gmail остался не побежденным на данный момент. 

Отправка писем через smtp в phpmailer

В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают в спам или совсем не доходят до адресатов. Альтернатива – это отправка e-mail через SMTP с реального почтового ящика.

Проект на vhod-v-lichnyj-kabinet.ru.

Если при отправки писем возникает ошибка «Could not connect to SMTP host», то необходимо добавить следующие строки:

В настройках почты нужно разрешить доступ к почтовому ящику с помощью почтовых клиентов:

Если возникает ошибка при отправки почты, то нужно отключить двухфакторную авторизацию и разблокировать «ненадежные приложения» в настройках конфиденциальности аккаунта https://myaccount.google.com/security?pli=1

Лимит – 2000 писем в день, но не более 5 в секунду.

Доступ к сторонним почтовым серверам по SMTP-портам (25, 465, 587) ограничен, разрешена отправка не более 300 сообщений в сутки.

Лимит – 3000 писем в день.

Имя сервера можно узнать в разделе «Информация о включенных сервисах и паролях доступа»:

В разделе «Услуги» нужно включить опцию «SMTP-сервер»:

В настройках веб-сервера необходимо включить PHP расширение «openssl».

Отправка писем через smtp на php 2 способа

Функция mail() бывает блокируется на хостинге или самом сайте. Если писать в службу поддержки долго или не имеет смысла – придется отправлять письма через SMTP.

Похожее:  Авторизация на сессиях своими руками. Делаем логин в админке | Webdevkin

СПОСОБ 1 – просто вставляем этот код на сайте с некоторыми настройками:

<?php
$config[‘smtp_username’] = ‘support@yandeg.ru’; //Смените на имя своего почтового ящика. (ваш email)
$config[‘smtp_port’] = ’25’; // Порт работы. Не меняйте, если не уверены. На 2022 порт вроде 465. ЕСЛИ ВООБЩЕ НЕ РАБОТАЕТ – убрать кавычки в 25
$config[‘smtp_host’] = ‘smtp.yandex.ru’; //сервер для отправки почты
$config[‘smtp_password’] = ‘pass’; //Измените пароль (от вашего ящика)
$config[‘smtp_debug’] = true; //Если Вы хотите видеть сообщения ошибок, укажите true вместо false
$config[‘smtp_charset’] = ‘windows-1251’; //кодировка сообщений. (или UTF-8, итд) (меняется также в самом низу)
$config[‘smtp_from’] = ‘Leon1010’; //Ваше имя – или имя Вашего сайта. Будет показывать при прочтении в поле “От кого”
function smtpmail($mail_to, $subject, $message, $headers=”) {
global $config;
$SEND = “Date: “.date(“D, d M Y H:i:s”) . ” UTrn”;
$SEND .= ‘Subject: =?’.$config[‘smtp_charset’].’?B?’.base64_encode($subject).”=?=rn”;
if ($headers) $SEND .= $headers.”rnrn”;
else
{
$SEND .= “Reply-To: “.$config[‘smtp_username’].”rn”;
$SEND .= “MIME-Version: 1.0rn”;
$SEND .= “Content-Type: text/plain; charset=””.$config[‘smtp_charset’].””rn”;
$SEND .= “Content-Transfer-Encoding: 8bitrn”;
$SEND .= “From: “”.$config[‘smtp_from’].”” <“.$config[‘smtp_username’].”>rn”;
$SEND .= “To: $mail_to <$mail_to>rn”;
$SEND .= “X-Priority: 3rnrn”;
}
$SEND .= $message.”rn”;
if( !$socket = fsockopen($config[‘smtp_host’], $config[‘smtp_port’], $errno, $errstr, 30) ) {
if ($config[‘smtp_debug’]) echo $errno.”<br>”.$errstr;
return false;
}

if (!server_parse($socket, “220”, __LINE__)) return false;

fputs($socket, “HELO ” . $config[‘smtp_host’] . “rn”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить HELO!</p>’;
fclose($socket);
return false;
}
fputs($socket, “AUTH LOGINrn”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу найти ответ на запрос авторизаци.</p>’;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_username’]) . “rn”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Логин авторизации не был принят сервером!</p>’;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_password’]) . “rn”);
if (!server_parse($socket, “235”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>’;
fclose($socket);
return false;
}
fputs($socket, “MAIL FROM: <“.$config[‘smtp_username’].”>rn”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду MAIL FROM: </p>’;
fclose($socket);
return false;
}
fputs($socket, “RCPT TO: <” . $mail_to . “>rn”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду RCPT TO: </p>’;
fclose($socket);
return false;
}
fputs($socket, “DATArn”);

if (!server_parse($socket, “354”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду DATA</p>’;
fclose($socket);
return false;
}
fputs($socket, $SEND.”rn.rn”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не смог отправить тело письма. Письмо не было отправленно!</p>’;
fclose($socket);
return false;
}
fputs($socket, “QUITrn”);
fclose($socket);
return TRUE;
}

function server_parse($socket, $response, $line = __LINE__) {
global $config;
while (@substr($server_response, 3, 1) != ‘ ‘) {
if (!($server_response = fgets($socket, 256))) {
if ($config[‘smtp_debug’]) echo “<p>Проблемы с отправкой почты!</p>$response<br>$line<br>”;
return false;
}
}
if (!(substr($server_response, 0, 3) == $response)) {
if ($config[‘smtp_debug’]) echo “<p>Проблемы с отправкой почты!</p>$response<br>$line<br>”;
return false;
}
return true;
}
?>

Использовать код можно так-же как и обычную функцию mail:
<?php
$headers = ‘MIME-Version: 1.0’ . “rn”;
$headers .= ‘Content-type: text/html; charset=”windows-1251“‘ . “rn”;
$headers .= ‘From: vasya@pupkin.ru’. “rn”;
smtpmail(’email-получателя@mail.ru’, ‘Тема письма’, ‘Текст письма’, $headers);
?>

СПОСОБ 2 – просто копируем его на сайт и нечего не настраиваем

<?php
/**
* SendMailSmtpClass
*
* Класс для отправки писем через SMTP с авторизацией
*
* @author Ipatov Evgeniy <admin@ipatov-soft.ru>
* @version 1.0
*/
class SendMailSmtpClass {

/**
*
* @var string $smtp_username – логин
* @var string $smtp_password – пароль
* @var string $smtp_host – хост
* @var string $smtp_from – от кого
* @var integer $smtp_port – порт
* @var string $smtp_charset – кодировка
*
*/
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”) . ” UTrn”;
$contentMail .= ‘Subject: =?’ . $this->smtp_charset . ‘?B?’ . base64_encode($subject) . “=?=rn”;
$contentMail .= $headers . “rn”;
$contentMail .= $message . “rn”;

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 . “rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: HELO’);
}

fputs($socket, “AUTH LOGINrn”);
if (!$this->_parseServer($socket, “334”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, base64_encode($this->smtp_username) . “rn”);
if (!$this->_parseServer($socket, “334”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, base64_encode($this->smtp_password) . “rn”);
if (!$this->_parseServer($socket, “235”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, “MAIL FROM: “.$this->smtp_username.”rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: MAIL FROM’);
}

fputs($socket, “RCPT TO: ” . $mailTo . “rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: RCPT TO’);
}

fputs($socket, “DATArn”);
if (!$this->_parseServer($socket, “354”)) {
fclose($socket);
throw new Exception(‘Error of command sending: DATA’);
}

fputs($socket, $contentMail.”rn.rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(“E-mail didn’t sent”);
}

fputs($socket, “QUITrn”);
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;

Похожее:  SQL injection для начинающих. Часть 1 / Хабр

}
}

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

require_once “SendMailSmtpClass.php”; // подключаем класс

$mailSMTP = new SendMailSmtpClass(‘zhenikipatov@yandex.ru’, ‘****’, ‘smtp.yandex.ru’, ‘Evgeniy’); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= “MIME-Version: 1.0rn”;
$headers .= “Content-type: text/html; charset=utf-8rn”; // кодировка письма
$headers .= “From: Evgeniy <admin@vk-book.ru>rn”; // от кого письмо
$result = $mailSMTP->send(‘zhenikipatov@yandex.ru’, ‘Тема письма’, ‘Текст письма’, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true){
echo “Письмо успешно отправлено”;
}else{
echo “Письмо не отправлено. Ошибка: ” . $result;
}

Материал взят частично с сайтов:

http://i-leon.ru/smtp-php/

| 2022-09-01 | Отправка писем через SMTP на PHP 2 способа | Функция mail() бывает блокируется на хостинге или самом сайте. Если писать в службу поддержки долго или не имеет смысла – придется отправлять письма ч |

Подтверждение адреса электронной почты на php

Я получил множество вопросов от моих читателей, в большинстве из которых они спрашивали меня, как реализовать систему подтверждения адреса электронной почты с помощью PHP.

Ниже приведен базовый урок, объясняющий, как создать базу данных и надлежащий код активации. Реализация выполнена с помощью методов mysqli_(), так как методы mysql_() уже потеряли свои позиции.

Скачать скрипт

Демо

Примерная таблица базы данных users содержит пять столбцов: идентификатор пользователя (uid), адрес электронной почты (email), пароль (password), активация (activation) и статус (status):

Содержит простой HTML код:

Файл конфигурации базы данных, измените имя пользователя, пароль, базу данных и основные значения URL:

Содержит PHP код, который сохраняет данные регистрации пользователя в таблицу users.

Здесь же находится генерация кода активации с помощью MD5 шифрования:

<?php
include 'db.php';
 $msg='';
 if(!empty($_POST['email']) && isset($_POST['email']) &&  !empty($_POST['password']) &&  isset($_POST['password']) )
 {
// имя пользователя и пароль отправлены из формы
 $email=mysql_real_escape_string($_POST['email']);
 $password=mysql_real_escape_string($_POST['password']);
// регулярное выражение для проверки написания адреса электронной почты
 $regex = '/^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,4})$/';
 if(preg_match($regex, $email))
 { 
 $password=md5($password); // encrypted password
 $activation=md5($email.time()); // encrypted email timestamp
 $count=mysqli_query($connection,"SELECT uid FROM users WHERE email='$email'");
// проверка адреса электронной почты
 if(mysqli_num_rows($count) < 1)
 {
mysqli_query($connection,"INSERT INTO users(email,password,activation) VALUES('$email','$password','$activation')");
// отправка письма на электронный ящик
include 'smtp/Send_Mail.php';
 $to=$email;
 $subject="Подтверждение электронной почты";
 $body='Здравствуйте! <br/> <br/> Мы должны убедиться в том, что вы человек. Пожалуйста, подтвердите адрес вашей электронной почты, и можете начать использовать ваш аккаунт на сайте. <br/> <br/> <a href="'.$base_url.'activation/'.$activation.'">'.$base_url.'activation/'.$activation.'</a>';

Send_Mail($to,$subject,$body);
 $msg= "Регистрация выполнена успешно, пожалуйста, проверьте электронную почту."; 
 }
 else
 {
 $msg= 'Данный адрес электронный почты уже занят, пожалуйста, введите другой. '; 
 }
 }
 else
 {
 $msg = 'Адрес, введенный вами, неверен. Пожалуйста, попробуйте еще раз.'; 
 }
 }
// HTML часть
?>

В этом файле находится функция отправки сообщения, измените только SMTP хост, имя пользователя и пароль.

Здесь вы можете использовать элементы GMail SMTP для тестирования:

Содержит PHP код, в котором статус пользователя, основанный на коде активации, обновляется со значения 0 до 1.

Скрипт перенаправления URL, который превращает

http://website.com/activation.php?code=ACTIVATION_CODE

в

http://website.com/activation/ACTIVATION_CODE

Sending html email using php mail() function

The body of the message can be written in HTML. However, as I’ve mentioned above, it should be simple. In the PHP mail function(), the HTML part will look like this:

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';

It’s important to remember that to send HTML mail, you need to set the Content-type header:

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';

Sending html email via smtp with phpmailer

Most likely, you will use HTML to design your email notification. So, let’s review some examples of using HTML methods and attributes.

Basic HTML message

In any case, I start with PHPMailer class:

If you have used Composer for installation, include the Composer generated autoload.php file:

require 'pathtocomposercomposervendorautoload.php';
If you have installed PHPMailer manually, initialize it like this:
require path/to/PHPMailer/src/PHPMailer.php'; 
require path/to/PHPMailer/src/SMTP.php'; 
require path/to/PHPMailer/src/Exception.php';
The next step is to create a new PHPMailer object:
$mail = new PHPMailer();

Now let’s move to an SMTP configuration:

Sending email via an smtp server in php

Where do I specify the SMTP settings? This is a fair question. Go to the PHP installation folder and configure them in the “php.ini” file. But this will only work for localhost or Xmapp like solutions because as I have already mentioned, PHP mail function does not support SMTP authentication and doesn’t allow sending messages via external servers.

There are some other, rather haphazard options but I won’t promote them and recommend using external PHP mail packages for sending emails via an external SMTP server.

Sending email with phpmailer and smtp

To send emails with PHPMailer and SMTP, you need to install PHPMailer and configure SMTP settings first.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 4,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector