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" ; $заглавија .= „Од: Име на испраќачотСо цел да се оваа формаработеше без функцијата 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 = „Име на испраќачотКако да испраќате е-пошта користејќи 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 = „Тест корисникНекои 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
Можеби ќе ве интересира зошто моето сценарио е подобро од другите што лежат на отворено?! ќе одговорам
- Работи со Yandex, Rambler, Mail (gmail не можеше да победи)
- Исчисти го кодот. За да го конфигурирате, само сменете неколку линии
- Испраќа е-пошта во 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 во директориумот на статии).