Smtp код за авторизација. Испраќање е-пошта (SMTP наспроти пошта PHP). Како да испраќате е-пошта користејќи ASP

Бидејќи испраќањето анонимни пораки од виртуелните сервери за хостирање на Windows е забрането, испраќањето писма треба да се врши преку SMTP сервер, за кој исто така е можно да се користи нашиот систем за пошта.

Како да испраќате е-пошта користејќи PHP?

Користење на која било класа PHP што поддржува авторизација на серверот smtp. На пример, можете да го користите множеството класа PHPMailer.

Можете исто така да го користите нашиот пример, кој имплементира испраќање писма со помош на сервер smtp, кој бара овластување. Затоа, не заборавајте да ги додадете соодветните детали за пристап во скриптата, на пример:

// Ако треба да го прикажете дневникот за сесии SMTP, можете да ја откоментирате следната линија. // $_SERVER ["debug"] = точно;функција MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // Адреса на SMTP сервер$smtp_port = 25 ; // SMTP серверска порта$smtp_user = " [заштитена е-пошта]" ; // Корисничко име за авторизација на серверот SMTP$smtp_password = "pAsSwORd" ; // Лозинка за авторизација на серверот SMTP$mail_from = " [заштитена е-пошта]" ; // Поштенско сандаче од кое е испратено писмото$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($sock, 512); if (! $sock ) ( printf ( "Сокетот не е создаден\n" ); излез (1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "SERVER_NAME" ]); smtp_msg ($sock, „НАЈАВА НА AUTH“); 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 ДО:<" . $reciever . ">" ); smtp_msg ($sock , "DATA"); $headers = "Предмет: " . $subject. "\r\n" . $headers; $data = $headers. "\r\n\r\n" $content ; _SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ( "Испрати од нас : %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ( "Сокетот е надолу\n" ); излез (1); ) друго (if (isset($_SERVER [ "отстранување грешки" ]) && $_SERVER [ "отстранување грешки" ]) (printf ("Добив од сервер: %s
" , nl2br (htmlspecialchars ($str )); ) $e = експлодира (" " , $str ); $code = array_shift ($e ); $str = implode ( " " , $e ); ако ($code > 499 ) ( printf ( „Проблеми со SMTP разговор.

Код %d.
Порака %s
"
, $code , $str ); излез (1); ) ) ) ?>

Преземете пример на готова скрипта со функцијата MailSmtp(): smtpauth.php.sample

Можете да ја користите функцијата MailSmtp() опишана погоре за директно да ја замените функцијата mail() разгледајте пример од наједноставната форма во PHP:

// Заглавија на пораките, тие го дефинираат кодирањето на пораката, полињата Од, До итн.$headers = "MIME-верзија: 1.0\r\n" ; $заглавија .= "Тип на содржина: текст/html; множество знаци=windows-1251\r\n"; $headers .= "До: $to \r\n" ; $заглавија .= „Од: Име на испраќачот " ; // пошта ($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(" [заштитена е-пошта]"); // додавање адреса на примачот message.From = new MailAddress("from@ домен.tld", "Име на испраќачот"); // наведувајќи го името и адресата на испраќачот message.Subject = "Предмет на пораката"; // наведувајќи го предметот на писмотопорака.BodyEncoding = System.Text.Encoding.UTF8; // специфицирање на кодирање на буквитепорака.IsBodyHtml = неточно; // одредување на формат на буквата (точно - HTML, неточно - не HTML)порака.Тело = "Текст на пораката"; // наведувајќи го текстот (телото) на буквата SmtpClient клиент = нов SmtpClient("smtp.site",25); // создавање нова врска со серверот „smtp.site“клиент.DeliveryMethod = SmtpDeliveryMethod.Network; // го дефинира методот за испраќање поракиклиент.EnableSsl = неточно; // ја оневозможува потребата да се користи безбедна врска со серверотклиент.UseDefaultCredentials = неточно; // оневозможи користење на стандардните детали за авторизација client.Credentials = new NetworkCredential("postmaster@ домен.tld", "***лозинка***"); // наведувајќи ги потребните детали (корисничко име и лозинка) за авторизација на серверот SMTPклиент.Испрати(порака); // Испрати порака %>

Преземете пример на пополнет формулар што покажува употреба овој метод: 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@домен.tld", "Sender_name") smtpMssg.To.Add (" [заштитена е-пошта]") „Додавање адреса на примачот smtpMssg.Subject = "Предмет на е-пошта" „назначување на предметот на писмото smtpMssg.Body = "Текст на пораката" „ означување на текстот (телото) на писмото smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 „ означување на кодирањето на буквата smtpMssg.IsBodyHtml = неточно " означување на форматот на буквите (точно - HTML, неточно - не HTML)Затемнете ја SmtpMail како нов SmtpClient ("smtp.site", 25) " декларација на нов објект од типот "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network „назначување на начинот на доставување на писмото SmtpMail.UseDefaultCredentials = Неточно " стандардно оневозможување на употребата на ингеренциите за овластување" SmtpMail.EnableSsl = Неточно " ја оневозможува потребата за користење безбедна врска со серверот SmtpMail.Credentials = нов NetworkCredential("postmaster@ домен.tld", "***лозинка***") „со означување на потребните детали (корисничко име и лозинка) за авторизација на серверот SMTP SmtpMail.Send(smtpMssg) “ испраќање порака %>

Исто така постои и застарена (и застарена) класа SmtpMail (со користење на именскиот простор Систем.Веб.Пошта). Подолу е пример за неговата употреба за јазикот VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " декларација на нов објект од типот "MailMessage" smtpMssg.From = „Име на испраќачот домен.tld>" „Наведување на името и адресата на испраќачот smtpMssg.To = "admin@ домен.tld" " наведување на адресата на примачот smtpMssg.BodyFormat = MailFormat.Text „назначување на форматот на писмото smtpMssg.BodyEncoding = Кодирање.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@ домен.tld") „корисничко име за авторизација smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***password***") „лозинка за овластување SmtpMail.SmtpServer = "smtp.site" "со наведување на адресата на серверот 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@домен.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") Со cdoMessage Set .Configuration = iConfig .From = „Тест корисник домен.tld>" .До = "Корисник " .Subject = "Здраво, корисник" .TextBody = "Ја пишувам оваа порака од ASP скрипта."

Некои CMS веќе имаат вградени алатки за испраќање кореспонденција или соодветни модули, ајде да ги погледнеме најпопуларните.

Вордпрес

За овој CMS постои посебен модул „WP Mail SMTP“, пример за неговата конфигурација е опишан на страницата на модулот.

Обрнете внимание на илустрацијата во примерот во нашиот систем за пошта, неопходно е да се користи порта 25 и не е потребна SSL шифрирање.

Џумла

Во административниот панел, одете во делот „Општи поставки“, изберете го табулаторот „Сервер“. Во полето „Пошта“, треба да го изберете методот на испраќање како „SMTP-сервер“, во полињата „Адреса на серверот SMTP“ и „SMTP најавување“ и „SMTP лозинка“ наведете ги соодветните детали за системот за пошта, на пример: smtp.сајт, box@your_domainи соодветните лозинка.

Друпал

Овој CMS има и свој модул за работа со SMTP серверот, базиран на PHPMailer.Можете да го преземете овој модул на неговата страница на веб-страницата на CMS Drupal.

NetCat

Овој CMS нема вградени функции за работа со SMTP сервер. За да испратите пошта користејќи скрипти на страницата, можеме да понудиме да го користиме нашето решение за да го поврзете, мора да ги извршите следните чекори:

  • Преземете архива со потребните датотеки од нашата веб-страница ( send_auth_mail.phpИ mail.inc.php) и отпакувајте го на вашиот компјутер;
  • Уреди датотека send_auth_mail.phpод архивата, означувајќи ги во неа деталите за поврзување со саканиот SMTP сервер:

    • $mail_smtpServer = "smtp.site"; (Адреса на SMTP сервер)
    • $mail_port = "25" ; (порта за поврзување)
    • $mail_username = "[заштитена е-пошта]" ; (корисничко име за авторизација на серверот SMTP)
    • $mail_password = "Лозинка"; (лозинка за авторизација на серверот SMTP)
  • Направете резервна копија на датотеката domain.tld/www/netcat/admin/mail.inc.php;
  • преземање датотеки send_auth_mail.phpИ mail.inc.phpна виртуелната локација во директориумот domain.tld/www/netcat/admin/

домен.tldтреба да се замени со името на вашиот домен.

Предложеното решение работи со сите NetCat модули кои ги користат стандардните функции на овој CMS за испраќање пошта.

Долго време барав решение да испраќам писма до корисниците не преку функцијата mail() во PHP, туку преку SMTP mail серверите. Нема многу разновидни информации на Интернет, а она што е таму не функционира сосема правилно или воопшто не функционира. Затоа, составив сè и напишав сопствен код, врз основа на готови кои се претставени на сајтовите.

Зошто праќате преку SMTP, а не по пошта()

Мојот одговор е прилично едноставен - извесно време вирусите испраќаа тони писма преку мојот сервер, што доведе до тоа мојата IP адреса да биде БАНирана од многу поштари, особено gmail.com, а во врска со ова, корисниците можеа да примаат писма, па јас морав да барам алтернатива, и ја најдов - ова е SMTP

Можеби ќе ве интересира зошто моето сценарио е подобро од другите што лежат на отворено?! ќе одговорам

  1. Работи со Yandex, Rambler, Mail (gmail не можеше да победи)
  2. Исчисти го кодот. За да го конфигурирате, само сменете неколку линии
  3. Испраќа е-пошта во HTML формат

Еве ги предностите на моето сценарио кое не го најдов никаде на Интернет, но од секое земав се што ми требаше. Значи, да го погледнеме кодот.

Функција smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //кодирање на пораката. (или UTF-8, итн.) $config [ "smtp_from"] = "mashintop.ru" //Вашето име - или името на вашата страница ќе биде прикажано во полето "Од" кога ќе се прочита $config["smtp_debug"] = неточно за да ги видите пораките за грешка, наведете точно наместо неточно $config["smtp_port"] = "25" // Не менувајте ја работната порта ако не сте сигурни; [заштитена е-пошта]"; $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"] = " [заштитена е-пошта]"; $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"] = " [заштитена е-пошта]"; $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"] = " [заштитена е-пошта]"; $config["smtp_username"] = "alexeybertram"; //Променете го името на вашето поштенско сандаче. $config["smtp_host"] = "smtp.gmail.com"; //сервер за испраќање пошта $config[" smtp_password "] = "moi_parol"; //Промени ја лозинката ) $header="Датум: ".date("D, j M Y G:i:s")." +0700rn"; $header.="Од: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="X-Mailer: Лилјакот! (v3.99.3) Professionalrn"; $header.="Одговори-на: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="X-приоритет: 3 (нормално)rn"; $header.="Идентификација на порака:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="До: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))"? =<$mail_to>rn"; $header.="Тема: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="MIME-верзија: 1.0rn"; charset=windows-1251rn"; $header.="Кодирање на пренос на содржина: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"],$errno , $errstr, 10, if(!$smtp_conn) (печатење „врската од сервери“; fclose($smtp_conn); exit;) $data = fputs($smtp_conn,"EHLO "); config["smtp_searcher"]."rn" $code = substr(get_data($smtp_conn),0,3000 if($code != 250) (печати "EHLO поздравна грешка"; fclose($smtp_conn); излез;) fputs($smtp_conn,"AUTH LOGINrn"; fclose ($smtp_conn;) fputs($smtp_conn,base64_encode("".$config["smtp_username"].""). ) ; if($code != 334) (печати „грешка при пристап до овој корисник“; fclose($smtp_conn); излез;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn"; fclose ($smtp_conn); излез;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (печати „серверот ја одби командата 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) (печати "Серверот не ја прифати командата RCPT TO"; fclose($smtp_conn); излез;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 354) (печати „серверот не прифати ПОДАТОЦИ“; fclose($smtp_conn); излез;) fputs($smtp_conn,$header."rn".$порака."rn.rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (печати „грешка при испраќање порака“; fclose($smtp_conn); излез;) fputs($smtp_conn,"QUITrn"); fclose ($smtp_conn); ) функцијата get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ($data .= $str; if(substr($str,3,1) == " " ) ( пауза; ) ) врати $data ) $text_email = " Штотуку додадовте реклама на веб-страницата mashintop.ru. Можете да го погледнете овде
Вашиот клуч: ".$key."

Користејќи го овој клуч, можете да управувате со вашата реклама.

"; $text_email .= " "; smtpmail(" [заштитена е-пошта]", "Клучот за рекламата на mashintop.ru", $text_email, "yandex"); //користете Yandex smtpmail(" [заштитена е-пошта]", "Клучот за рекламата на mashintop.ru", $text_email, "mail"); //користете ја е-поштата smtpmail(" [заштитена е-пошта]", "Клучот за рекламата на mashintop.ru", $text_email, "rambler"); //користете го rambler smtpmail(" [заштитена е-пошта]", "Клучот за огласот на mashintop.ru", $text_email, "gmail"); // но gmail не работи :(

Тоа е сè, готовата скрипта е во ваши раце, само копирајте ја, променете ги вредностите на низата $config и сè ќе работи добро.

Сега да погледнеме некои елементи на кои би сакал да се фокусирам.

На пример, грешката што ја добиваме кога се обидуваме да испратиме преку SMTP до Google. Првично го гледаме овој текст за грешка:

За да видите нешто поконкретно, ајде малку да го измениме кодот

Fputs($smtp_conn"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); ехо $шифра; if($code != 334) (печатете „серверот не дозволи овластувањето да започне“; fclose($smtp_conn); излезете;)

И на крајот добиваме многу специфична грешка

530 5.7.0 Прво мора да издаде команда STARTTLS. x4sm16408296lbn.2 - gsmtp

Не знам што точно значи, но верувам дека има врска со сигурна, необезбедена врска. Сè уште не знам како да се ослободам од него, така што gmail во моментов останува непоразен.



2019-08-05

Здраво, драг посетител!

Простете ми за доцнењето со ажурирањето на блогот. Но, постои сосема разбирливо објаснување за ова. На крајот на краиштата, лето, дача, гости, шума, вода и многу повеќе, што не ми дозволи да се зафатам со прашањата за создавање веб-страница. Но, сега малку се ослободив, гостите си заминаа и мислам дека сега дефинитивно ќе можам да обрнам должно внимание на ова.

Така, откако во последната статија ја поврзавме поштата на нашиот домен со една од услугите за пошта, сега да видиме како можете да испраќате е-пошта од страницата. Покрај тоа, на таков начин што нашите писма не завршуваат во СПАМ, туку веродостојно, со висок степен на веројатност, се доставуваат до нашите примачи.

Општо земено, постои вградена функција mail() за испраќање букви во PHP. Но, треба да се забележи дека и покрај едноставноста на овој метод (во овој случај, за испраќање букви доволно е да наведете само една линија код со одредени параметри), употребата на оваа опција има значителен недостаток поврзан со проблемот на СПАМ .

Факт е дека анти-SPAM филтрите на серверите за пошта на страната на примачот навистина не ги фаворизираат писмата испратени преку функцијата mail(). И во повеќето случаи, таквите пораки се филтрираат или дури се бришат пред да стигнат до примачот.

И за да се елиминираат таквите случаи колку што е можно, обично се користи друга опција, во која се испраќаат писма како да е направено од услуга за пошта од трета страна.

Овој метод се нарекува испраќање пошта преку SMTP со овластување. Што ќе го разгледаме денес користејќи го примерот за испраќање формулар за повратни информации. Покрај тоа, за ова ќе ја користиме прилично добро познатата и популарна библиотека PHPMailer, која ви овозможува едноставно да организирате испраќање писма преку SMTP.

  • Како ќе испраќаме писма за повратни информации
  • Креирање формулар за повратни информации
  • Инсталирање на библиотеката PHPMailer
  • Ние создаваме скрипта за испраќање пошта преку SMTP
  • Проверка на испраќање е-пошта
  • Изворните датотеки на страницата

Како ќе испраќаме писма за повратни информации

Пред да започнеме со практичната работа на испраќање писма со повратни информации, прво да одлучиме како ќе го направиме тоа.

Формуларот за повратни информации е дизајниран да му овозможи на корисникот да комуницира со администраторот на страницата за да ја пренесе својата порака. Вообичаено, оваа форма се состои од неколку полиња и копче „Поднеси“.

Во принцип, за да испратите е-пошта доволно е да користите само неколку полиња кои даваат доволно информации за корисникот и содржината на пораката, како што се:

  • "Име" - за да го внесете името на испраќачот на пораката;
  • „Е-пошта“ - за адресата на е-пошта на испраќачот;
  • „Предмет на пораката“;
  • „Текст на пораката“.

Иако можете да додадете други. На пример, телефонски број, ако тоа е навистина потребно.

Во нашиот случај, таквите писма ќе бидат испратени до адресата на администраторот на страницата од вистинско поштенско сандаче со овластување на услугата за пошта на која е поврзан нашиот домен.

Бидејќи во претходната статија се фокусиравме на проверка на поврзувањето на поштата на доменот со услугата Yandex.Mail, ќе испратиме пошта за оваа опција. Иако ова не е важно. Подолу ќе ги видите оние опции кои, кога ќе се променат, ќе ви овозможат да испраќате е-пошта преку серверот за пошта Mail.ru.

Како вистинско поштенско сандаче од кое ќе се испраќаат писма, ќе ја користиме сметката на новосоздаден корисник на пошта домен, да речеме со адресата [заштитена е-пошта]. И ние ќе ги испратиме овие писма до поштенското сандаче на администраторот [заштитена е-пошта], што претходно го создадовме во претходната статија.

Така, испраќачот на писмото од формуларот за повратни информации ќе биде поштенското сандаче [заштитена е-пошта]., и примачот - [заштитена е-пошта]. Во овој случај, сите информации за корисникот кој ја испратил пораката со нејзината содржина ќе бидат пренесени во телото на испратеното писмо.

Креирање формулар за повратни информации

Откако ќе одлучиме за постапката за испраќање писма, сега ќе креираме формулар за повратни информации со кој ќе го направиме тоа.

Подолу е HTML-кодот за оваа форма, кој ќе го поставиме на страницата „Контакти“ (датотека kontakty.php во директориумот на статии).

    "статија" >

    Контакти

    Повратни информации

    "контакт"акција = "#" метод = "пост" >

    Формулар за повратни информации

    За сите прашања, барања и деловни предлози, можете да не контактирате користејќи го формуларот за повратни информации подолу.

    „Блок за контакт“ >

    „влез за контакт“ >

    "текст" id = "Име за контакт"име = "Име за контакт"наслов = „Името мора да биде на руски и да содржи најмалку 3 знаци“ шема = "{3,}" потребно >

  1. „празен контакт“ >

    „влез за контакт“ >

    "е-пошта" id = "контакт-пошта"име = "контакт-пошта"потребно >

  2. "контакт-предмет" >

  3. "контакт-коментар" >

  4. "копче за контакт" >

    "поднеси"име = "копче за контакт"вредност = "Испрати" >

Сл.1 HTML код на формуларот за повратни информации

Можете да видите како на крајот изгледа формуларот за повратни информации прикажан овде на следната слика од екранот.

Така, се создава саканата форма. И сега можете да преминете на прашањата за обработка и испраќање податоци во форма на е-порака.

Инсталирање на библиотеката PHPMailer

Како што беше претходно забележано, за испраќање пошта ќе ја користиме библиотеката PHPMailer, која значително ќе го поедностави испраќањето е-пошта преку протоколот SMTP со овластување на услуга за пошта од трета страна.

За да го инсталирате, треба да ги преземете потребните датотеки. Ова може да се направи од веб-услугата GitHub користејќи Composer (менаџер за зависност од пакети за PHP). Или едноставно преземете ги потребните датотеки на вообичаен начин.

скриншот 73

Подолу е веб-услугата на GitHub, каде што е означен линкот до редовното преземање на библиотеката PHPMailer.

Покрај тоа, најновата верзија 6.0.7, која беше зачувана во моментот на пишување на овој напис, може да се преземе од приложените материјали.

Во секој случај, добиената архивска датотека треба да се отпакува, по што извадената папка PHPMailer-master со целата нејзина содржина треба да се стави во коренот на страницата. Во исто време, за едноставност, можете да го преименувате во PHPMailer. Подолу е содржината на папката PHPMailer сместена во root директориумот на страницата.

Така ја инсталиравме библиотеката PHPMailer. По што можеме да започнеме со креирање на скрипта со која ќе испраќаме е-пошта од нашата веб-страница.

Ние создаваме скрипта за испраќање пошта преку SMTP

За да ја составите скриптата, доволно е да ги искористите препораките за користење на PHPMailer дадени на страницата GitHub, кои претходно ги користевме за преземање на библиотеката.

Тие, особено, укажуваат дека на почетокот на скриптата е потребно да се увезат класи PHPMailer во глобалниот именски простор. И дадени се специфични линии на соодветниот код. Исто така, постојат примери за користење на својствата и методите на PHPMailer, вклучително и за опцијата за испраќање пошта преку SMTP.

Но, ако ова не е доволно, тогаш можете да ја користите и документацијата, која содржи опис на сите својства и методи на оваа библиотека.

скриншот 74

Подолу е кодот на скриптата за испраќање пошта од формуларот за повратни информации преку SMTP со овластување. Каде што сите линии поврзани со PHPMailer се дадени со објаснување и означени со светла позадина.

Остатокот од делот, вклучувајќи фрагменти поврзани со примање и обработка на податоци од формуларот, кои претходно моравме да ги користиме во други процесори, е означен со темна позадина. Тие беа детално дискутирани претходно во една статија посветена конкретно на прашањата за добивање и проверка на податоци од формулар во PHP. Каде што зборувавме и за универзалната корисничка функција за валидација и обработка на податоците од формуларот check_symbol().

Оваа скрипта ќе ја ставиме во истата датотека kontakty.php во која претходно го создадовме формуларот за повратни информации.

    //----Скрипта за испраќање пошта преку SMTP користејќи PHPMailer----

    //Увезете PHPMailer класи во глобалниот именски простор. Тие треба да бидат на врвот на сценариото, а не во функцијата

    употреба PHPMailer\PHPMailer\PHPMailer ;

    употреба PHPMailer\PHPMailer\Exception ;

    ако (!празен($_POST["контакт-копче" ])) (

    $name = $_POST["контакт-име" ];

    $name = check_symbol ($име, "Име" , "1" , "/^+\z/iu" );

    $email = $_POST["контакт-пошта" ];

    $email = check_symbol ($email, "E-mail" , "1" , "/^+@(+\.)+(2,6)\z/i");

    $subject = $_POST["contact-subject" ];

    $subject = check_symbol ($subject, "Предмет на пораката" , "1" , "0" );

    $comment = $_POST["контакт-коментар" ];

    $comment = check_simbol ($comment, „Текст на порака“, "1" , "0" );

    ако (!празен($GLOBALS["предупредување" ])) (

    $alert = "Податоците од формуларот не беа испратени. Пронајдени се следните грешки:\n".$alert;

    вклучуваат"alert.php" ;

    друго {

    //Поврзување на библиотеката

    бараат"PHPMailer/src/PHPMailer.php" ;

    бараат"PHPMailer/src/Exception.php" ;

    бараат"PHPMailer/src/SMTP.php" ;

    $mail = нов PHPMailer(); //Иницијализирајте ја класата

    $from = " [заштитена е-пошта]" ; //Адреса на е-пошта од која е испратено писмото

    $to = " [заштитена е-пошта]" ; //Адреса на примачот

    $mail -> isSMTP(); //Користете го протоколот SMTP

    $mail -> Домаќин = "smtp.yandex.ru" ; //Адреса на серверот за пошта

    $mail -> SMTPAuth = вистина ; //Овозможи режим на авторизација

    $mail -> Корисничко име = " [заштитена е-пошта]" ; //Најавете се од е-пошта на домен поврзан со услуга за е-пошта од трета страна (во овој случај, Yandex.Mail)

    $mail -> Лозинка = "27MrDon89" ; //Лозинка за домен пошта

    $mail -> SMTPSecure = "ssl" ; //Протокол за шифрирање

    $mail -> Port = "465" ; // SMTP серверска порта

    $mail -> CharSet = "UTF-8" ; //Енкодирање

    $mail -> setFrom ($from, „Администратор“ ); //Адреса и име на испраќачот

    $mail -> addAddress ($to, „Администратор“ ); //Адреса и име на примачот

    $mail -> isHTML ( вистина ); //Поставете го форматот на е-пошта во HTML

    $mail -> Предмет = „Образец за повратни информации е поднесен“; //Предмет на е-пошта (наслов)

    $mail -> Тело = "

    Име на испраќачот: $име

    Адреса на испраќачот: $ е-пошта

    Предмет на пораката: $предмет

    Содржина на пораката: $коментар



    " ; //Содржина на пораката

    $mail -> AltBody = „Текст на алтернативна буква“; //Алтернативна е-пошта ако клиентот за е-пошта не поддржува HTML формат

    $mail -> SMTPDbug = 0 ; //Овозможи дебагирање на SMTP: 0 - исклучено (за нормална употреба), 1 = пораки на клиентот, 2 - пораки на клиентот и серверот

    ако($mail -> испрати()) (

    $alert = „Пораката е испратена“; //Излезете порака во дијалог прозорецот на прелистувачот за успешното испраќање на писмото

    друго {

    $alert = „Грешка, е-поштата не може да се испрати:“.$mail -> ErrorInfo ; //Излези порака за грешка

    вклучуваат"alert.php" ;

Сл.5 Скрипта за испраќање е-пошта преку SMTP со овластување

Како што можете да видите, сите линии директно поврзани со испраќање е-порака, во која се наведени потребните методи и својства, се придружени со коментари. Затоа, нема смисла да се повторуваме, но можеме да се задржиме само на некои од нив, кои навистина бараат дополнителни објаснувања, имено:

1. Поради фактот што писмото е испратено од услуга за пошта од трета страна, овде се применуваат поставките што одговараат на конкретниот SMTP-сервер. Во овој случај, за случајот на употреба на серверот Yandex.Mail, се применуваат следните вредности на својствата:

  • Имотот Домаќин(поз.28) - Адреса на серверот за пошта со вредност smtp.yandex.ru;
  • Имотот SMTPScure
  • Имотот Пристаниште

Овие вредности на својствата се преземени од страницата Yandex.Help прикажана на следната слика од екранот.

Но, таквите информации може да се добијат и од други ресурси. За да го направите ова, само внесете го соодветното барање во пребарувачот, на пример: „Сервер Yandex smtp“. Каде можете да најдете голем број референци за ова прашање.

На сличен начин, вредностите на поставките може да се добијат од други SMTP сервери. Подолу е скриншот на страницата за помош Mail.ru, која ги прикажува поставките на SMTP серверот на услугата за пошта Mail.ru.

И така, во случај на користење на Mail.ru како SMTP сервер од трета страна, треба да се применат следните вредности на својствата на класата PHPMailer:

  • Имотот Домаќин(поз.28) - Адреса на серверот за пошта (smtp.mail.ru);
  • Имотот SMTPScure(поз.32) - Протокол за шифрирање (ssl);
  • Имотот Пристаниште(поз. 33) - порта за сервер SMTP (465).

Сличен пристап треба да се примени и за други услуги за е-пошта.

2. Во имот Корисничко име(поз. 30) потребно е да се наведе целосната адреса на поштенското сандаче на доменот. Во овој случај, " [заштитена е-пошта]".

Меѓутоа, ако користите друга сметка освен сметка за домен за испраќање писма, но адреса поврзана директно со услугата за пошта, на пример " [заштитена е-пошта]", тогаш најавувањето треба да биде само делот од адресата до знакот "@". Во овој случај, најавувањето би имало вредност "повратна информација".

3. PHPMailer обезбедува својство SMTPD грешка(поз. 50), што ви овозможува да прикажете различни нивоа на грешки на екранот на прелистувачот. Оваа функција во голема мера го поедноставува наоѓањето проблеми при дебагирање на скрипта.

Вообичаено, во нормален режим, кога вредноста е поставена на 0, излезот на детални информации за грешка е оневозможен. Но, ако се појават проблеми со испраќање пошта или при дебагирање, можно е да се користат други вредности за да се прикажат позначајни информации за грешката.

За да видиме како ова изгледа во пракса, ајде привремено да воведеме некоја грешка во поставките. На пример, во лозинката за пошта на доменот (својство Лозинка, поз.31). И, исто така, за прикажување детални информации за грешката, привремено поставена во имотот SMTPD грешка(поз.50) вредност 1. После, кога сè е дебагирано и проверено, ќе го оневозможиме режимот за дебагирање SMTP, заменувајќи го 1 со 0.

Во последниот дел од скриптата, откако ќе се наведат сите потребни својства и методи, методот се користи за испраќање на писмото испрати ()) (поз. 51). И ако писмото е испратено, и методот испрати ()за објект $mailвраќа true, потоа во дијалогот за прелистувач преку променливата $alertЌе се прикаже порака за успешно испраќање пошта (поз. 52).

Ако, поради некоја причина, поштата не може да се испрати, и соодветно на тоа, методот не може да се врати точно, тогаш оваа состојба ќе биде придружена со соодветна порака за грешка (поз. 55).

Проверка на испраќање е-пошта

Откако создадовме скрипта за испраќање пошта, природно, треба да го погледнеме резултатот од нашата „креативност“. Дали овде зедовме сè предвид и не направивме грешка?

За да го направите ова, ајде да се обидеме, како што е наменето, да испратиме порака од корисникот до администраторот на страницата од формуларот за повратни информации. Подолу е скриншот од формуларот за повратни информации со полињата пополнети пред да се поднесе.

И еве го резултатот од поднесувањето на формуларот.

Каде, од пораката во дијалог прозорецот на прелистувачот, јасно е дека писмото не може да се испрати поради проблем со SMTP-врската.

Но, од сега имотот SMTPD грешка(поз. 50) се доделува вредност 1, потоа можеме да видиме детални информации за настанатата грешка и да ја дознаеме причината за нејзиното појавување.

Следната слика од екранот покажува дека при обидот за поврзување, откриена е грешка при автентикација, што значи употреба на погрешно најавување или лозинка.

По отстранувањето на несовпаѓањето на лозинката (претходно се користеше неточна лозинка за да може да се провери излезот на дополнителни информации за грешката), ќе се обидеме повторно да ја испратиме поштата.

Овој пат се чинеше дека сè помина добро и добивме порака дека поштата е успешно испратена. Очигледно, освен намерно внесената привремена грешка во лозинката за домен пошта, не направивме други грешки.

Но, за да се увериме дека писмото навистина е доставено до примачот, да ја внесеме поштата со адресата [заштитена е-пошта]и погледнете го резултатот.

Како што можете да видите, писмото од адресата [заштитена е-пошта], од која испративме е-пошта со име „Повратна информација“ успешно стигна до администраторот на страницата. Во исто време, телото на писмото ја содржи целата содржина што ја генериравме во скриптата користејќи податоци добиени од формуларот за повратни информации, имено:

  • Име на испраќачот: Николај;
  • Адреса на испраќачот: [заштитена е-пошта];
  • Тема на пораката: Проверка на испраќање пошта;
  • Содржина на пораката: Тест порака.

Сега, откако успешно го проверивте испраќањето пошта, можете да го оневозможите режимот за дебагирање SMTP со доделување на имотот SMTPD грешка(поз.50) вредност 0.

Така, ја завршивме задачата да создадеме алатка за испраќање пошта преку SMTP со овластување користејќи сервер за пошта од трета страна.

На пример, во следната статија, ќе погледнеме како да испратиме е-пошта за потврда за враќање на податоците од регистрираната корисничка сметка.

Изворните датотеки на страницата

Изворните датотеки на страницата со ажурирањата што беа направени во овој напис може да се преземат од приложените дополнителни материјали:

  • www датотеки со директориуми
  • Табели со бази на податоци на MySQL

Во PHP е доста популарно да се користат скрипти кои го автоматизираат процесот на испраќање писма. Во оваа статија ќе погледнеме едноставна скрипта која испраќа писма до примателите преку SMTP( Едноставен протокол за пренос на пошта ). Би било премногу лесно да се ограничиме само на оваа функционалност, скриптата поддржува и прилози, односно можете да прикачите датотека pdf, txt или doc во вашето писмо.

Поставувањето на скриптата е прилично едноставно.

Скриптата работи со класата km_smtp_class.php, добрата работа за класата е што поддржува различни SSL и TLS протоколи кои обезбедуваат безбеден пренос на податоци.

Еве го самото сценарио:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [заштитена е-пошта]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // Е-пошта на примачот $Receiver = " [заштитена е-пошта]"; // Предмет на пораката $Subject = "Испраќам е-пошта од PHP"; // Текст на пораката (во HTML) $Text = "Здраво!
Порака испратена од скрипта МошонВеб-страница: http://site"; // Прилог во писмото - адресата на датотеката $Attachment = ""; /* $mail = нов KM_Mailer(сервер, порта, корисник, лозинка, тип); */ /* Типот може да биде: null, tls или ssl */ $mail = нов 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(). " [заштитена е-пошта]"); $mail->addRecipient(" [заштитена е-пошта]"); /* $mail->send (Од, За, Предмет, Текст, Предмет = изборно) */ $SendMail = $mail->send ($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text // Избриши ја листата на примачи $mail->clearBCC(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 порта)

Јаху пошта: smtp.mail.yahoo.com SSL порта: 465

(Ако ви треба адреса на smtp сервери кои не се на списокот, пишете во коментар)

SMTP_port - Веќе го опишавме погоре за секој smtp сервер.

SMTP_email - корисникот би бил попрецизен, но за јасност напишав е-пошта, ја наведуваме адресата на е-пошта.

SMTP_pass - Лозинка за е-поштата што беше наведена како вредност во клучот SMTP_email


SMTP_type - Стандардно NULL. Протоколот со кој ќе се испраќаат писма. Протоколи: SSL и TLS

Можете да додавате прилози на писмо со едноставно назначување на целосната адреса на датотеката во променливата $Attachment (/var/patch/to/file/File.pdf)

Ако имате какви било прашања, напишете ги во коментарите подолу.

Испратете пошта PHP

Оваа функција стандардно се имплементира како испраќање е-пошта. Оваа функционалност не бара сервер од трета страна за препраќање е-пошта. За да ја проверите исправноста на оваа функција, само креирајте тест.php датотека во папката со страницата и ставете го следниов код таму:

Каде наместо тоа "EMAILПРИМАТЕЛ" Внесете ја е-поштата на која треба да се испрати писмото.

Ставете ја оваа датотека во коренот на вашата страница.

Следно, внесете www.YourDomain/test.php во лентата за адреси. Ако писмото е примено на наведената е-пошта, тогаш вашиот хостинг работи правилно со функцијата за испраќање писма " Испратете пошта PHP". Можно е писмото да завршило во спам, па затоа исто така треба да се провери.

Ако писмото пристигнало во неразбирливо кодирање, сменете ја линијата: "Проверка на испраќање пошта"на "Проверка на испраќање пошта", "Content-type:text/html;charset=utf-8".

И повторете го испраќањето на писмото преку лентата за адреси на вашиот прелистувач.

Ако по горенаведените манипулации тест писмото не стигне до крајниот примач, мора да ја контактирате вашата техничка поддршка за хостирање.

Меѓу недостатоците на овој метод, вреди да се напомене дека овој метод не работи постојано. Може да има прекини во испраќањето е-пошта на страната на хостинг.

Главниот недостаток на овој метод е што сите писма испратени до е-поштата на клиентите нема да бидат препознаени од поштенските услуги (gmail, mail.ru, yandex.ru), бидејќи тие се испратени директно од вашата веб-страница.

Услугата за пошта на Gmail ги прикажува овие букви со прашалник и потпис: „Системот на Gmail не можеше да потврди дека ова писмо е испратено од доменот YourDomain Ова може да е спам“.

За да се избегне оваа ситуација .

SMTP (Едноставен протокол за пренос на пошта)

SMTP - протокол за пренос на пошта. Севкупно, за да поставите пренос на пошта користејќи го овој протокол, потребен ви е самиот сервер SMTP. Најчеста опција за користење на корпоративна (домен) пошта yandex.ru како SMTP сервер е https://pdd.yandex.ru/.

Пред сè е неопходно сметка (пошта) yandex, врз основа на кои ќе се креираат е-пошта за вашиот домен: „order@YourDomain“ „info@YourDomain“... Главната сметка нема да биде видлива никаде и се користи само за креирање е-пошта на домен врз основа на неа во иднина.

По овластувањето во вашата лична сметка на Yandex, се креира домен пошта на врската https://pdd.yandex.ru/. Ова е е-поштата на доменот што корисниците ќе ја видат во полето „Испраќач“.

Полето „Испраќач“ е потребно при испраќање е-пошта преку SMTP. Користење на SMTP за испраќање букви, комбинација од " Домен" - "е-пошта", со што буквите се препознаваат од поштенските услуги.


Меѓу недостатоците на овој метод, вреди да се забележи неможноста да се „вчита“ портрет за пошта на домен, бидејќи самите поштенски услуги сè уште не ја обезбедуваат оваа функционалност.




Врв