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

Почему отправка через SMTP а не mail()

У меня ответ довольно простой — какое-то время через мой сервер вирусяки отправляли тонны писем, что привело в БАНу моего 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"] = "[email protected]"; $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"] = "[email protected]"; $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"] = "[email protected]"; $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"] = "[email protected]"; $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 = " Вы только что добавили объявление на сайте mashintop.ru. Посмотреть его можно здесь
Ваш ключ: ".$key."

С помощью данного ключа вы сможете управлять своим объявлением.

"; $text_email .= " "; smtpmail("[email protected]", "Ключ от объявления на mashintop.ru", $text_email, "yandex"); //используем яндекс smtpmail("[email protected]", "Ключ от объявления на mashintop.ru", $text_email, "mail"); //используем майл smtpmail("[email protected]", "Ключ от объявления на mashintop.ru", $text_email, "rambler"); //используем рамблер smtpmail("[email protected]", "Ключ от объявления на 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 остался не побежденным на данный момент.

Поскольку отправка анонимных сообщений с серверов виртуального Windows-хостинга запрещена, отправку писем следует производить через SMTP-сервер , для чего так же возможно использовать и нашу почтовую систему.

Как отправлять письма, используя PHP?

С помощью любого класса PHP, поддерживающего авторизацию на smtp-сервере . Например, можно использовать набор классов PHPMailer.

Также вы можете воспользоваться нашим примером, в котором реализована отправка писем с использованием smtp-сервера , для которого требуется авторизация. Поэтому не забудьте добавить в скрипт соответствующие реквизиты доступа, например:

// Если нужно показать лог SMTP-сессии, то можно раскомментировать следующую строчку. // $_SERVER["debug"] = true; function MailSmtp ($reciever , $subject , $content , $headers , $debug = 0 ) { $smtp_server = "smtp.сайт" ; // адрес SMTP-сервера $smtp_port = 25 ; // порт SMTP-сервера $smtp_user = "[email protected]" ; // Имя пользователя для авторизации на SMTP-сервере $smtp_password = "pAsSwORd" ; // Пароль для авторизации на SMTP-сервере $mail_from = "[email protected]" ; // Ящик, с которого отправляется письмо $sock = fsockopen ($smtp_server , $smtp_port , $errno , $errstr , 30 ); $str = fgets ($sock , 512 ); if (! $sock ) { printf ("Socket is not created\n" ); exit(1 ); } smtp_msg ($sock , "HELO " . $_SERVER [ "SERVER_NAME" ]); smtp_msg ($sock , "AUTH LOGIN" ); smtp_msg ($sock , base64_encode ($smtp_user )); smtp_msg ($sock , base64_encode ($smtp_password )); smtp_msg ($sock , "MAIL FROM: <" . $mail_from . ">" ); smtp_msg ($sock , "RCPT TO: <" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Subject: " . $subject . "\r\n" . $headers ; $data = $headers . "\r\n\r\n" . $content . "\r\n." ; smtp_msg ($sock , $data ); smtp_msg ($sock , "QUIT" ); fclose ($sock ); } function smtp_msg ($sock , $msg ) { if (! $sock ) { printf ("Broken socket!\n" ); exit(1 ); } if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) { printf ("Send from us: %s
" , nl2br (htmlspecialchars ($msg ))); } fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) { printf ("Socket is down\n" ); exit(1 ); } else { if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) { printf ("Got from server: %s
" , nl2br (htmlspecialchars ($str ))); } $e = explode (" " , $str ); $code = array_shift ($e ); $str = implode (" " , $e ); if ($code > 499 ) { printf ("Problems with SMTP conversation.

Code %d.
Message %s
"
, $code , $str ); exit(1 ); } } } ?>

Скачать пример готового скрипта с функцией MailSmtp(): smtpauth.php.sample

Использовать описанную выше функцию MailSmtp() можно для прямой замены функции mail(), рассмотрим пример самой простой формы на PHP:

// Заголовки сообщения, в них определяется кодировка сообщения, поля From, To и т.д. $headers = "MIME-Version: 1.0\r\n" ; $headers .= "Content-type: text/html; charset=windows-1251\r\n" ; $headers .= "To: $to \r\n" ; $headers .= "From: Имя отправителя " ; // mail ($to, $subject, $message, $headers); require_once "smtpauth.php" ; MailSmtp ($to , $subject , $message , $headers ); } ?>
Кому: 
 Тема: 
 Текст: 
 
 

Для того, чтобы данная форма заработала без функции mail(), мы включили файл smtpauth.php через require_once и вызвали функцию MailSmtp(), описанную в нем, с аналогичными для mail() аргументами. При этом сам вызов mail() мы закомментировали в коде, чтобы избежать ошибки при выполнении скрипта.

Как отправлять письма, используя ASP.NET?

Если вы используете версию 2.0, то используя класс MailMessage System.Net.Mail ), хорошо описанный .

Ниже приведены примеры его использования для языков «C#» и «VisualBasic»:

Пример для языка «C#»:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // создание нового письма message.To.Add ("[email protected]"); // добавление адреса получателя message.From = new MailAddress("from@domain.tld ", "Имя_отправителя"); // указание имени и адреса отправителя message.Subject = "Тема письма"; // указание темы письма message.BodyEncoding = System.Text.Encoding.UTF8; // указание кодировки письма message.IsBodyHtml = false; // указание формата письма (true - HTML, false - не HTML) message.Body = "Текст письма"; // указание текста (тела) письма SmtpClient client = new SmtpClient("smtp.сайт",25); // создание нового подключения к серверу "smtp.сайт" client.DeliveryMethod = SmtpDeliveryMethod.Network; // определяет метод отправки сообщений client.EnableSsl = false; // отключает необходимость использования защищенного соединения с сервером client.UseDefaultCredentials = false; // отключение использования реквизитов авторизации "по-умолчанию" client.Credentials = new NetworkCredential("postmaster@domain.tld ", "***password***"); // указание нужных реквизитов (имени пользователя и пароля) для авторизации на SMTP-сервере client.Send(message); // отправка сообщения %>

Скачать пример готовой формы, демонстрирующей использование данного метода: MailForm.aspx .

Пример для языка «VisualBasic»:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% Dim smtpMssg AS new MailMessage smtpMssg.From = New MailAddress ("admin@domain.tld ", "Имя_отправителя") smtpMssg.To.Add ("[email protected]") " добавление адреса получателя smtpMssg.Subject = "Тема письма" " указание темы письма smtpMssg.Body = "Текст письма" " указание текста (тела) письма smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 " указание кодировки письма smtpMssg.IsBodyHtml = false " указание формата письма (true - HTML, false - не HTML) Dim SmtpMail As New SmtpClient("smtp.сайт", 25)" объявление нового объекта типа "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network " указание метода доставки письма SmtpMail.UseDefaultCredentials = False " отключение использования реквизитов авторизации "по-умолчанию" SmtpMail.EnableSsl = False " отключает необходимость использования защищенного соединения с сервером SmtpMail.Credentials = new NetworkCredential("postmaster@domain.tld ", "***password***") " указание нужных реквизитов (имени пользователя и пароля) для авторизации на SMTP-сервере SmtpMail.Send(smtpMssg) " отправка сообщения %>

Также существует устаревший (и не рекомендуется к использованию) класс SmtpMail (используется пространство имен System.Web.Mail ). Ниже приведен пример его использования для языка «VisualBasic»:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " объявление нового объекта типа "MailMessage" smtpMssg.From = "Имя_отправителя domain.tld >" " указание имени и адреса отправителя smtpMssg.To = "admin@domain.tld " " указание адреса получателя smtpMssg.BodyFormat = MailFormat.Text " указание формата письма smtpMssg.BodyEncoding = Encoding.UTF8 "указание кодировки письма smtpMssg.Subject = "Тема письма" " указание темы письма smtpMssg.Body = "Текст письма" " указание текста письма smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) " указание необходимости SMTP-авторизации на сервере smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@domain.tld ") " имя пользователя для авторизации smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***password***") " пароль для авторизации SmtpMail.SmtpServer = "smtp.сайт" " указание адреса SMTP-сервера SmtpMail.Send(smtpMssg) " отправка сообщения %>

Как отправлять письма, используя ASP?

Обратите внимание, что при использовании нашего smtp-сервера требуется авторизация, поэтому не забудьте добавить в скрипт соответствующие реквизиты доступа, например:

<% iConfig = Server.CreateObject("CDO.Configuration") Set iConfig = Server.CreateObject("CDO.Configuration") With iConfig.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.сайт" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru" .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "postmaster@domain.tld " .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") With cdoMessage Set .Configuration = iConfig .From = "Test user domain.tld >" .To = "User " .Subject = "Hello, User" .TextBody = "I write this message from ASP script." .Send End With Set cdoMessage = Nothing Set iConfig = Nothing %>

Некоторые CMS уже имеют встроенные средства для отправки корреспонденции или соответствующие модули, рассмотрим самые популярные из них.

Wordpress

Для данной CMS существует специальный модуль «WP Mail SMTP », пример его конфигурации описан на странице модуля .

Обратите внимание на иллюстрацию в примере, в условиях нашей почтовой системы требуется использовать 25-й порт и SSL-шифрование не требуется.

Joomla

В панели администрирования перейдите в раздел «Общие настройки», выберете вкладку «Сервер». В поле «Почта» требуется выбрать способ отправки как «SMTP-сервер », в полях «Адрес SMTP-сервера » и «SMTP-логин » и «SMTP-пароль » укажите соответствующие реквизиты почтовой системы, например: smtp.сайт, ящик@ваш_домен и соответствующий пароль.

Drupal

Эта CMS так же имеет собственный модуль для работы с SMTP-сервером , основанный на базе PHPMailer. Загрузить данный модуль можно на его странице на сайте CMS Drupal, описание установки модуля доступно в архиве с ним.

NetCat

Данная CMS не имеет встроенных функций для работы с SMTP-сервером . Для отправки почты скриптами сайта мы можем предложить использовать наше решение, для его подключения необходимо выполнить следующие действия:

  • Скачать с нашего сайта архив с необходимыми файлами (send_auth_mail.php и mail.inc.php ) и распаковать его на компьютере;
  • Отредактировать файл send_auth_mail.php из архива, указав в нём реквизиты подключения к нужному SMTP-серверу:

    • $mail_smtpServer = "smtp.сайт" ; (адрес SMTP-сервера )
    • $mail_port = "25" ; (порт для подключения)
    • $mail_username = "[email protected]" ; (имя пользователя для авторизации на SMTP-сервере )
    • $mail_password = "Password" ; (пароль для авторизации на SMTP-сервере )
  • Создать резервную копию файла domain.tld/www/netcat/admin/mail.inc.php ;
  • Загрузить файлы send_auth_mail.php и mail.inc.php на виртуальную площадку в директорию domain.tld/www/netcat/admin/

domain.tld следует заменить на имя вашего домена.

Предлагаемое решение работает со всеми модулями NetCat, которые используют стандартные функции данной CMS для отправки почты.

В некоторых случаях с целью тестирования или диагностики работы почты, почтовому администратору требуется проверить отправку писем через свои сервера Exchange (и не только) с определенных хостов. В том случае, если сервер не требует авторизации (open-relay сервер), отправить почту можно . Однако в большинстве случае почтовые сервера для отправки почты требуют авторизации. В этом примере мы покажем, как в консоли telnet выполнить аутентификацию типа AUTH LOGIN на SMTP сервере и отправить письмо.

AUTH LOGIN – в терминологии Exchange – это базовая аутентификация, когда имя и пароль пользователя передаются по сети в закодированном по алгоритму base64 виде. На большинстве внутренних серверах Exchange администраторы не отключают Basic Authentication . Проверить ее поддержку можно в настройках принимающего коннектора.

Примечание . Обращаем ваше внимание что злоумышленник при доступе к каналу связи может легко перехватить и расшифровать закодированные по Base64 учетные данные пользователя. Поэтому этот способ авторизации рекомендуется использовать исключительно в частных корпоративных сетях.

Для авторизации на почтовом сервер с с помощью AUTH LOGIN, нам нужно преобразовать имя и пароль пользователя, из-под которого будет отправляться письмо в формат Base64. Это можно сделать с помощью скриптов или онлайн сервисов. Я воспользоваться сайтом https://www.base64encode.org/ .

Имя пользователя: testuser@ contoso. com , в кодировке Base64 получилось: dGVzdHVzZXJAY29udG9zby5jb20=

Пароль: $ up3 RsTr) ng — в Base64 JHVwM1 JzVHIpbmc=

Теперь в командой строке с помощью Telnet подключаемся на 25(SMTP) порт нашего почтового сервера (вводимые команды я буду выделять синим цветов):

telnet mail.contoso.com 25

Если это Exchange, он вернет что-то вроде;

Представимся:

ehlo sender.contoso.com

Сервер вернет список поддерживаемых типов авторизаций и возможностей. Как вы видите базовая авторизация (AUTH LOGIN) в списке имеется.

250-mail.contoso.com Hello
250-SIZE 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING

AUTH LOGIN

Сервер должен ответить:
334 VXNlcm5hbWU6

Теперь вставляем имя пользователя в формате Base64, которое мы закодировали ранее:
dGVzdHVzZXJAY29udG9zby5jb20=

Сервер должен ответить:

334 UGFzc3dvcmQ6.

Теперь пора вставить пароль в формате Base64:
JHVwM1JzVHIpbmc=

Если имя и пароль пользователя верны, сервер ответит.
235 2.7.0 Authentication successful

Если нет:

535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

Теперь можно заполнить стандартные поля письма:

mail from: [email protected]
250 2.1.0 Sender OK
rcpt to: [email protected]
250 2.1.5 Recipient OK
data
354 Start mail input; end with .
from: TestUserovich
to: TheAdmin < [email protected] >
Subject: Test BASE SMTP Authenticated via Telnet
This is test
.
250 2.6.0 Queued mail for delivery

QUIT

221 2.0.0 Closing connection.
Connection closed by foreign host.

На этом все, тестовое письмо должно успешно доставиться в ящик получателя.

Чтобы определенный сайт имел возможность качественно и продуктивно работать, к его созданию стоит подойти максимально ответственно и взвешенно. Особого внимания заслуживает выбор системы, которая будет использоваться при создании интернет-магазина. Дело в том, что коммерческая платформа, специализирующаяся на продажах товаров или услуг, должна позволять реализовать весь необходимый функционал и быть удобной в использовании, как для администраторов, занимающихся обслуживанием и наполнением сайтов, так и для клиентов интернет-магазинов. Многие люди и компании, которые встают перед вопросом подбора подходящей для себя CMS, анализируют: что выбрать Magento или OkayCMS. Давайте сравним особенности и возможности данных движков для сайтов.

При работе над собственным сайтом, человеку или компании предстоит приложить большие усилия - только в таком случае можно рассчитывать на положительные результаты и получение действительно эффективного инструмента. Одним из основополагающих вопросов, который предстоит решить еще до того, как начинать создание сайта, будет тот, как определиться с наиболее подходящим вариантом CMS. Далее мы сравним две CMS: Joomla или OkayCMS, обратим внимание на особенности каждой из них.

Наличие собственного сайта - одно из основополагающих требований для эффективного, успешно работающего бизнеса. Статистика однозначно свидетельствует в пользу возрастания числа покупок различных товаров и заказов услуг через интернет. Принимая это во внимание, большинство коммерческих компаний уже осознают необходимость наличия собственного сайта. Впрочем, одного только факта наличия интернет ресурса еще недостаточно, чтобы рассчитывать на его эффективность, рентабельность и ожидаемую для бизнеса пользу.

При подготовке к созданию собственного сайта или открытию интернет-магазина, необходимо принять во внимание и проанализировать немало вопросов, а также решить различные задачи. Только в таком случае можно рассчитывать на то, что ваш проект принесет положительные результаты и сможет в полной мере оправдать возлагаемые ожидания. Среди различных вопросов, связанных с разработкой интернет-магазина, особого внимания заслуживает вопрос выбора CMS. Чтобы вам было проще определиться с оптимальным для себя движком, в рамках

Планируя создание собственного сайта для будущего интернет-магазина, достаточно большое число человек и даже специализирующихся на продажах компаний становятся перед непростым и чрезвычайно важным выбором: на какой из существующих CMS остановиться. Если вы размышляете о том, что выбрать: PrestaShop или OkayCMS, предлагаем ознакомиться с данной статьей, в которой мы сравним две эти системы для создания интернет-сайтов, в частности, интернет-магазинов.

В PHP достаточно популярно использовать скрипты которые автоматизируют процесс отправки писем. В данной статье мы рассмотрим простой скрипт который выполняем отправку писем на почту получателей по средствам SMTP(Simple Mail Transfer Protocol ). Было бы слишком просто ограничится только этим функционалом, скрипт поддерживает и вложения то есть, вы сможете прикрепить pdf, txt или doc файл в своем письме.

Настройка скрипта довольно проста, от вас требуется только данные отправителя логин, пароль от электронной почты с которого будут отправляться письма.

Скрипт работает с классом km_smtp_class.php, класс хорош тем, что поддерживает разные протоколы SSL и TLS которые предоставляют защищенную передачу данных.

Вот и сам скрипт:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => "[email protected]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // Email получателя $Receiver = "[email protected]"; // Тема сообщения $Subject = "Отправляем письмо из PHP"; // Текст сообщения (в HTML) $Text = "Привет!
Сообщение отправлено из скрипта Mowshon Сайт: http://сайт"; // Вложение в письме - адрес к файлу $Attachment = ""; /* $mail = new KM_Mailer(сервер, порт, пользователь, пароль, тип); */ /* Тип может быть: null, tls или ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $SenderConfig["SMTP_type"]); if($mail->isLogin) { // Прикрепить файл if($Attachment) {$mail->addAttachment($Attachment);} // Добавить ещё получателей $mail->addRecipient("[email protected]"); $mail->addRecipient("[email protected]"); /* $mail->send(От, Для, Тема, Текст, Заголовок = опционально) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text); // Очищаем список получателей $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); } else { echo "Возникла ошибка во время подключения к SMTP-серверу"; } ?>

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

SMTP_server - адрес SMTP сервера (индивидуальный адрес для разных почт)

Почта Mail.ru : smtp.mail.ru порт: 25, 587 и 465 (с шифрованием SSL)

Почта Yandex : smtp.yandex.ru порт: 25, 587 465 (SSL порт)

Почта Rambler : mail.rambler.ru порт: 25, 587 465 (SSL порт)

Почта Yahoo : smtp.mail.yahoo.com SSL-порт: 465

(Если понадобится адрес smtp серверов которые нет в списке - пишите в комментариях)

SMTP_port - Мы его сверху уже описали для каждого smtp сервера.

SMTP_email - точнее было бы user но для ясности написал email, указываем адрес электронной почты.

SMTP_pass - Пароль от электронной почты которая была указана как значение в ключе SMTP_email


SMTP_type - По умолчанию NULL. Протокол по которому будут отправлены письма. Протоколы: SSL и TLS

Вложения в письмо можно добавить просо указывая полный адрес к файлу в переменную $Attachment (/var/patch/to/file/File.pdf)

Если будут вопросы пишите их в комментариях ниже.


Close