Smtp autorisasjonskode. Sende e-poster (SMTP vs. post PHP). Hvordan sende e-post med ASP

Siden det er forbudt å sende anonyme meldinger fra virtuelle Windows-vertsservere, bør sending av brev gjøres via en SMTP-server, som det også er mulig å bruke vårt postsystem for.

Hvordan sende e-post med PHP?

Bruke en hvilken som helst PHP-klasse som støtter autorisasjon på smtp-serveren. Du kan for eksempel bruke klassesettet PHPMailer.

Du kan også bruke vårt eksempel, som implementerer sending av brev ved hjelp av en smtp-server, som krever autorisasjon. Derfor, ikke glem å legge til de riktige tilgangsdetaljene til skriptet, for eksempel:

// Hvis du trenger å vise SMTP-sesjonsloggen, kan du fjerne kommentarer på følgende linje. // $_SERVER["debug"] = sant; funksjon MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // SMTP-serveradresse$smtp_port = 25 ; // SMTP-serverport$smtp_user = " [e-postbeskyttet]" ; // Brukernavn for autorisasjon på SMTP-serveren$smtp_password = "pAsSwORd" ; // Passord for autorisasjon på SMTP-serveren$mail_from = " [e-postbeskyttet]" ; // Postkasse som brevet sendes fra$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($sokk, 512); if (! $sock ) ( printf ( "Socket er ikke opprettet\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 , "POST FRA:<" . $mail_from . ">" ); smtp_msg ($sock , "RCPT TIL:<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Emne: " . $subject . "\r\n" . $headers ; $data = $headers . "\r\n\r\n" . $content . "\r\n." ; smtp_msg ($sock , $data ); smtp_msg ($sock , "QUIT" ); fclose ($sock ); ) funksjon smtp_msg ($sock , $msg ) ( if ( ! $sock ) ( printf ("Broken socket!\n" ); exit(1 ); ) if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ( "Send fra oss : %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ( "Socket er down\n" ); exit(1); ) else ( if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ("Fikk fra server: %s
" , nl2br (htmlspecialchars ($str )); ) $e = eksplodere (" " , $str ); $code = array_shift ($e ); $str = imploder ( " " , $e ); if ($code > 499) ( printf ( "Problemer med SMTP-samtale.

Kode %d.
Melding %s
"
, $kode , $str ); exit(1); ) ) ) ?>

Last ned et eksempel på et ferdig skript med MailSmtp()-funksjonen: smtpauth.php.sample

Du kan bruke MailSmtp()-funksjonen beskrevet ovenfor for å erstatte mail()-funksjonen direkte; vurder et eksempel på den enkleste formen i PHP:

// Meldingshoder, de definerer meldingskodingen, Fra-, Til-feltene osv.$headers = "MIME-versjon: 1.0\r\n" ; $headers .= "Innholdstype: text/html; charset=windows-1251\r\n"; $headers .= "Til: $til \r\n" ; $headers .= "Fra: Avsenderens navn " ; // mail ($to, $subject, $message, $headers); require_once "smtpauth.php" ; MailSmtp ($to, $subject, $message, $headers); ) ?>
Til hvem: Emne: Tekst: 
 
 

For å Denne formen fungerte uten mail()-funksjonen, inkluderte vi smtpauth.php-filen via require_once og kalte MailSmtp()-funksjonen beskrevet i den, med argumenter som ligner på mail(). Samtidig kommenterte vi selve mail()-kallet i koden for å unngå feil ved utføring av skriptet.

Hvordan sende e-post med ASP.NET?

Hvis du bruker versjon 2.0, bruker du MailMessage-klassen System.Net.Mail), godt beskrevet.

Nedenfor er eksempler på bruk for C#- og VisualBasic-språkene:

Eksempel for C#-språket:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // opprette en ny bokstav message.To.Add(" [e-postbeskyttet]"); // legger til mottakeradresse melding.Fra = ny e-postadresse("fra@ domain.tld", "Avsenders navn"); // spesifiserer navn og adresse til avsenderen message.Subject = "Meldingens emne"; // spesifisere emnet for brevet message.BodyEncoding = System.Text.Encoding.UTF8; // spesifiserer bokstavkodingen melding.IsBodyHtml = usann; // spesifisere bokstavformatet (true - HTML, false - ikke HTML) message.Body = "Meldingstekst"; // spesifiserer teksten (brødteksten) til brevet SmtpClient-klient = ny SmtpClient("smtp.site",25); // oppretter en ny tilkobling til serveren "smtp.site" client.DeliveryMethod = SmtpDeliveryMethod.Network; // definerer metoden for å sende meldinger client.EnableSsl = false; // deaktiverer behovet for å bruke en sikker tilkobling til serveren client.UseDefaultCredentials = false; // deaktiver bruken av standard autorisasjonsdetaljer client.Credentials = new NetworkCredential("postmaster@ domain.tld", "***passord***"); // spesifisere de nødvendige detaljene (brukernavn og passord) for autorisasjon på SMTP-serveren klient.Send(melding); // sende melding %>

Last ned et eksempel på et utfylt skjema som viser bruk denne metoden: MailForm.aspx.

Eksempel for VisualBasic-språket:

<% @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", "Sender_name") smtpMssg.To.Add (" [e-postbeskyttet]") " legger til mottakeradresse smtpMssg.Subject = "E-postemne" "angivelse av emnet for brevet smtpMssg.Body = "Meldingstekst" " angivelse av teksten (brødteksten) i brevet smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 " indikasjon på bokstavkodingen smtpMssg.IsBodyHtml = usann " indikasjon på bokstavformatet (true - HTML, usant - ikke HTML) Dim SmtpMail som ny SmtpClient("smtp.site", 25) " erklæring av et nytt objekt av typen "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network "angivelse av brevleveringsmetoden SmtpMail.UseDefaultCredentials = False "deaktivering av bruk av autorisasjonslegitimasjon som standard" SmtpMail.EnableSsl = False " deaktiverer behovet for å bruke en sikker tilkobling til serveren SmtpMail.Credentials = new NetworkCredential("postmaster@ domain.tld", "***passord***") "som indikerer de nødvendige detaljene (brukernavn og passord) for autorisasjon på SMTP-serveren SmtpMail.Send(smtpMssg) " sender en melding %>

Det er også en utdatert (og utdatert) SmtpMail-klasse (som bruker navneområdet System.Web.Mail). Nedenfor er et eksempel på bruken for VisualBasic-språket:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " erklæring om et nytt objekt av typen "MailMessage" smtpMssg.From = "Avsendernavn domain.tld>" "Angivelse av navn og adresse til avsender smtpMssg.To = "admin@ domain.tld" " angivelse av mottakerens adresse smtpMssg.BodyFormat = MailFormat.Text " indikasjon på bokstavformatet smtpMssg.BodyEncoding = Encoding.UTF8 "som indikerer bokstavkodingen smtpMssg.Subject = "E-postemne" "angivelse av emnet for brevet smtpMssg.Body = "Meldingstekst" " angivelse av teksten i brevet smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "som indikerer behovet for SMTP-autorisasjon på serveren smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ domain.tld") "brukernavn for autorisasjon smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***passord***") "passord for autorisasjon SmtpMail.SmtpServer = "smtp.site" " som spesifiserer SMTP-serveradressen SmtpMail.Send(smtpMssg) " sender en melding %>

Hvordan sende e-post med ASP?

Vær oppmerksom på at når du bruker vår smtp-server, kreves autorisasjon, så ikke glem å legge til de riktige tilgangsdetaljene til skriptet, for eksempel:

<% 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") = "passord" .Oppdater End With Set cdoMessage = CreateObject("CDO.Message") Med cdoMessage Set .Configuration = iConfig .From = "Test bruker domain.tld>" .To = "Bruker " .Subject = "Hei, bruker" .TextBody = "Jeg skriver denne meldingen fra ASP-skript." .Send End With Set cdoMessage = Ingenting satt iConfig = Ingenting %>

Noen CMS har allerede innebygde verktøy for å sende korrespondanse eller tilsvarende moduler; la oss se på de mest populære.

Wordpress

For dette CMS er det en spesiell modul "WP Mail SMTP", et eksempel på konfigurasjonen er beskrevet på modulsiden.

Vær oppmerksom på illustrasjonen i eksemplet; i vårt postsystem er det nødvendig å bruke port 25 og SSL-kryptering er ikke nødvendig.

Joomla

I administrasjonspanelet går du til delen "Generelle innstillinger", velg fanen "Server". I "Mail"-feltet må du velge sendemetoden som "SMTP-server", i feltene "SMTP-serveradresse" og "SMTP-pålogging" og "SMTP-passord" spesifiser de riktige detaljene for e-postsystemet, for eksempel: smtp.site, boks@ditt_domene og tilsvarende passord.

Drupal

Dette CMS har også sin egen modul for arbeid med en SMTP-server, basert på PHPMailer. Du kan laste ned denne modulen på siden på CMS Drupal-nettstedet; en beskrivelse av hvordan du installerer modulen er tilgjengelig i arkivet med den.

NetCat

Dette CMS-systemet har ikke innebygde funksjoner for arbeid med en SMTP-server. For å sende e-post ved hjelp av nettstedsskript, kan vi tilby å bruke løsningen vår; for å koble til den må du utføre følgende trinn:

  • Last ned et arkiv med nødvendige filer fra nettstedet vårt ( send_auth_mail.php Og mail.inc.php) og pakk den ut på datamaskinen;
  • Rediger fil send_auth_mail.php fra arkivet, og angir tilkoblingsdetaljene til ønsket SMTP-server:

    • $mail_smtpServer = "smtp.site"; (SMTP-serveradresse)
    • $mail_port = "25" ; (tilkoblingsport)
    • $mail_brukernavn = "[e-postbeskyttet]" ; (brukernavn for autorisasjon på SMTP-serveren)
    • $mail_password = "Passord"; (passord for autorisasjon på SMTP-serveren)
  • Lag en sikkerhetskopi av filen domain.tld/www/netcat/admin/mail.inc.php;
  • laste ned filer send_auth_mail.php Og mail.inc.php til det virtuelle nettstedet i katalogen domain.tld/www/netcat/admin/

domain.tld bør erstattes med ditt domenenavn.

Den foreslåtte løsningen fungerer med alle NetCat-moduler som bruker standardfunksjonene til dette CMS for å sende e-post.

I lang tid har jeg lett etter en løsning for å sende brev til brukere ikke gjennom mail()-funksjonen i PHP, men gjennom SMTP-postservere. Det er ikke mye variert informasjon på Internett, og det som finnes fungerer ikke helt riktig, eller fungerer ikke i det hele tatt. Derfor satte jeg alt sammen og skrev min egen kode, basert på ferdige som presenteres på sidene.

Hvorfor sende via SMTP og ikke post()

Svaret mitt er ganske enkelt - i en tid sendte virus tonnevis av brev gjennom serveren min, noe som førte til at IP-adressen min ble utestengt av mange mailere, spesielt gmail.com, og i forbindelse med dette kunne brukere motta brev, så jeg måtte søke alternativ, og jeg fant det - dette er SMTP

Du er kanskje interessert i hvorfor manuset mitt er bedre enn andre som ligger i det fri?! jeg vil svare

  1. Det fungerer med Yandex, Rambler, Mail (gmail kunne ikke vinne)
  2. Tøm kode. For å konfigurere det, bare endre noen få linjer
  3. Sender e-post i HTML-format

Her er fordelene med manuset mitt, som jeg ikke fant noe sted på Internett, men fra hvert tok jeg alt jeg trengte. Så la oss se på koden.

Funksjon smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //meldingskoding. (eller UTF-8, etc.) $config [ "smtp_from"] = "mashintop.ru"; //Ditt navn - eller navnet på nettstedet ditt. Vil vises når det leses i "Fra"-feltet $config["smtp_debug"] = usant; //Hvis du vil for å se feilmeldinger, spesifiser true i stedet for false $config["smtp_port"] = "25"; // Arbeidsport. Ikke endre hvis du ikke er sikker. if($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. ru"; $config["smtp_email"] = " [e-postbeskyttet]"; $config["smtp_username"] = "mashintop"; //Endre til navnet på postkassen din. $config["smtp_host"] = "smtp.yandex.ru"; //server for å sende e-post $config[" smtp_password "] = "moi_parol"; //Endre passordet ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-postbeskyttet]"; $config["smtp_username"] = "mashintop"; //Endre til navnet på postkassen din. $config["smtp_host"] = "smtp.rambler.ru"; //server for å sende e-post $config[" smtp_password "] = "moi_parol"; //Endre passordet ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-postbeskyttet]"; $config["smtp_username"] = "mashintop"; //Endre til navnet på postkassen din. $config["smtp_host"] = "smtp.mail.ru"; //server for å sende e-post $config[" smtp_password "] = "moi_parol"; //Endre passord ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-postbeskyttet]"; $config["smtp_username"] = "alexeybertram"; //Endre til navnet på postboksen din. $config["smtp_host"] = "smtp.gmail.com"; //server for å sende e-post $config[" smtp_password "] = "moi_parol"; //Endre passord ) $header="Dato: ".date("D, j M Y G:i:s")." +0700rn"; $header.="Fra: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="X-Mailer: Flaggermusen! (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.="Meldings-ID:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="Til: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Emne: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))"?=rn"; $header.="MIME-versjon: 1.0rn"; $header.="Innholdstype: 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) (skriv ut "tilkobling fra servere mislyktes"; 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) (skriv ut "EHLO hello error"; fclose($smtp_conn); exit; ) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 334) (skriv ut "serveren tillot ikke autorisasjon å begynne"; fclose ($ smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_brukernavn"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; if ($code != 334) (skriv ut "feil ved tilgang til denne brukeren"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn" ); $code = substr(get_data($smtp_conn),0,3000); if($code != 235) (skriv ut "feil passord"; fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL FRA:".$config["smtp_email"]."rn"); $kode = substr(get_data($smtp_conn),0,3000); if($kode != 250) (skriv ut "serveren nektet MAIL FROM-kommandoen"; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $kode = substr(get_data($smtp_conn),0,3000); if($kode != 250 OG $kode != 251) (skriv ut "Tjeneren godtok ikke RCPT TO-kommandoen"; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $kode = substr(get_data($smtp_conn),0,3000); if($kode != 354) (skriv ut "serveren godtok ikke DATA"; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$melding."rn.rn"); $kode = substr(get_data($smtp_conn),0,3000); if($kode != 250) (skriv ut "feil ved sending av brev"; fclose($smtp_conn); exit;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) funksjonen get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( pause; ) ) returner $data; ) $text_email = " Du har nettopp lagt til en annonse på nettstedet mashintop.ru. Du kan se den her
Din nøkkel: ".$key."

Ved å bruke denne tasten kan du administrere annonsen din.

"; $text_email .= " "; smtpmail(" [e-postbeskyttet]", "Nøkkelen til annonsen på mashintop.ru", $text_email, "yandex"); //bruk Yandex smtpmail(" [e-postbeskyttet]", "Nøkkelen til annonsen på mashintop.ru", $text_email, "mail"); //bruk e-posten smtpmail(" [e-postbeskyttet]", "Nøkkelen til annonsen på mashintop.ru", $text_email, "rambler"); //bruk rambler smtpmail(" [e-postbeskyttet]", "Nøkkelen til annonsen på mashintop.ru", $text_email, "gmail"); // men gmail fungerer ikke :(

Det er alt, det ferdige skriptet er i dine hender, bare kopier det, endre verdiene til $config-matrisen og alt vil fungere bra.

La oss nå se på noen elementer som jeg ønsker å fokusere på.

For eksempel feilen vi får når vi prøver å sende via SMTP til Google. Til å begynne med ser vi denne feilteksten:

For å se noe mer spesifikt, la oss endre koden litt

Fputs($smtp_conn,"AUTH LOGINrn"); $kode = substr(get_data($smtp_conn),0,3000); ekko $kode; if($kode != 334) (skriv ut "serveren tillot ikke autorisasjon å begynne"; fclose($smtp_conn); exit;)

Og til slutt får vi en veldig spesifikk feil

530 5.7.0 Må utstede en STARTTLS-kommando først. x4sm16408296lbn.2 - gsmtp

Jeg vet ikke nøyaktig hva det betyr, men jeg tror det har noe å gjøre med en sikker, usikret tilkobling. Jeg vet ikke hvordan jeg skal bli kvitt det ennå, så gmail forblir ubeseiret for øyeblikket.



2019-08-05

Hei, kjære besøkende!

Tilgi meg for forsinkelsen med å oppdatere bloggen. Men det er en helt forståelig forklaring på dette. Tross alt var det sommer, dacha, gjester, skog, vann og mye mer, som ikke tillot meg å takle problemene med å lage et nettsted. Men nå har jeg frigjort meg litt, gjestene har gått, og jeg tror at nå skal jeg definitivt være oppmerksom på dette.

Så, etter at vi i den siste artikkelen koblet e-posten til domenet vårt til en av e-posttjenestene, la oss nå se hvordan du kan sende e-post fra nettstedet. Dessuten på en slik måte at våre brev ikke havner i SPAM, men er pålitelig, med høy grad av sannsynlighet, levert til våre mottakere.

Generelt er det en innebygd mail()-funksjon for å sende brev i PHP. Men det skal bemerkes at til tross for enkelheten til denne metoden (i dette tilfellet, for å sende brev er det nok å spesifisere bare en kodelinje med visse parametere), har bruken av dette alternativet en betydelig ulempe knyttet til problemet med SPAM .

Faktum er at anti-SPAM-filtrene til e-postservere på mottakerens side egentlig ikke favoriserer brev sendt gjennom mail()-funksjonen. Og i de fleste tilfeller blir slike meldinger filtrert eller til og med slettet før de når adressaten.

Og for å eliminere slike tilfeller så mye som mulig, brukes vanligvis et annet alternativ, der brev sendes som om det var gjort av en tredjeparts posttjeneste.

Denne metoden kalles å sende e-post via SMTP med autorisasjon. Som vi skal se på i dag ved å bruke eksemplet med å sende et tilbakemeldingsskjema. For dette vil vi dessuten bruke det ganske kjente og populære PHPMailer-biblioteket, som lar deg ganske enkelt organisere sending av brev via SMTP.

  • Hvordan vil vi sende tilbakemeldingsbrev
  • Opprette et tilbakemeldingsskjema
  • Installere PHPMailer-biblioteket
  • Vi lager et script for å sende e-post via SMTP
  • Sjekker e-postsending
  • Nettstedets kildefiler

Hvordan vil vi sende tilbakemeldingsbrev

Før vi begynner det praktiske arbeidet med å sende tilbakemeldingsbrev, la oss først bestemme hvordan vi skal gjøre det.

Tilbakemeldingsskjemaet er utformet slik at brukeren kan kommunisere med nettstedadministratoren for å formidle budskapet sitt. Vanligvis består dette skjemaet av flere felt og en "Send"-knapp.

For å sende en e-post er det i prinsippet nok å bruke bare noen få felt som gir tilstrekkelig informasjon om brukeren og innholdet i meldingen, for eksempel:

  • "Navn" - for å skrive inn navnet på meldingsavsenderen;
  • "E-post" - for avsenderens e-postadresse;
  • "Meldingsemne";
  • "Meldingstekst".

Selv om du kan legge til andre. For eksempel et telefonnummer, hvis dette virkelig er nødvendig.

I vårt tilfelle vil slike brev bli sendt til nettstedadministratorens adresse fra en ekte postkasse med autorisasjon på posttjenesten som domenet vårt er koblet til.

Siden vi i forrige artikkel fokuserte på å sjekke tilkoblingen av domenepost til Yandex.Mail-tjenesten, vil vi sende e-post for dette alternativet. Selv om dette ikke er viktig. Nedenfor vil du se de alternativene som, når de endres, lar deg sende e-post via Mail.ru-postserveren.

Som en ekte postkasse som brev vil bli sendt fra, vil vi bruke kontoen til en nyopprettet domenepostbruker, for eksempel med adressen [e-postbeskyttet]. Og vi sender disse brevene til administratorens postkasse [e-postbeskyttet], som vi tidligere opprettet i forrige artikkel.

Dermed vil avsenderen av brevet fra tilbakemeldingsskjemaet være postkassen [e-postbeskyttet]., og mottakeren - [e-postbeskyttet]. I dette tilfellet vil all informasjon om brukeren som sendte meldingen med innholdet bli overført i hoveddelen av det sendte brevet.

Opprette et tilbakemeldingsskjema

Etter at vi har bestemt oss for fremgangsmåten for å sende brev, vil vi nå lage et tilbakemeldingsskjema som vi skal gjøre dette med.

Nedenfor er HTML-koden for dette skjemaet, som vi vil plassere på "Kontakter"-siden (fil kontakty.php i artikkelkatalogen).

    "artikkel" >

    Kontakter

    Tilbakemelding

    "kontakt" handling = "#" metode = "post" >

    Tilbakemeldings-skjema

    For alle spørsmål, forespørsler og forretningsforslag kan du kontakte oss ved å bruke tilbakemeldingsskjemaet nedenfor.

    "kontakt blokk" >

    "kontakt-inngang" >

    "tekst" id = "kontakt navn" navn = "kontakt navn" tittel = "Navnet må være på russisk og inneholde minst 3 tegn" mønster = "{3,}" nødvendig >

  1. "tom-kontakt" >

    "kontakt-inngang" >

    "e-post" id = "Kontakt Epost" navn = "Kontakt Epost" nødvendig >

  2. "kontakt-emne" >

  3. "kontakt-kommentar" >

  4. "kontakt-knapp" >

    "sende inn" navn = "kontakt-knapp" verdi = "Sende" >

Fig.1 HTML-kode for tilbakemeldingsskjemaet

Du kan se hvordan tilbakemeldingsskjemaet som vises her til slutt ser ut i følgende skjermbilde.

Dermed opprettes ønsket form. Og nå kan du gå videre til problemene med å behandle og sende data i form av en e-postmelding.

Installere PHPMailer-biblioteket

Som tidligere nevnt, vil vi bruke PHPMailer-biblioteket for å sende e-post, som vil forenkle sending av e-post via SMTP-protokollen med autorisasjon på en tredjeparts e-posttjeneste betydelig.

For å installere den må du laste ned de nødvendige filene. Dette kan gjøres fra GitHub-netttjenesten ved å bruke Composer (en pakkeavhengighetsbehandling for PHP). Eller bare last ned de nødvendige filene på vanlig måte.

skjermbilde 73

Nedenfor er GitHub-netttjenestesiden, hvor lenken til den vanlige nedlastingen av PHPMailer-biblioteket er merket.

I tillegg kan siste versjon 6.0.7, som ble lagret da denne artikkelen ble skrevet, lastes ned fra vedlagte materialer.

I alle fall bør den resulterende arkivfilen pakkes ut, hvoretter den utpakkede PHPMailer-master-mappen med alt innholdet skal plasseres i roten av nettstedet. Samtidig, for enkelhets skyld, kan du gi det nytt navn til PHPMailer. Nedenfor er innholdet i PHPMailer-mappen plassert i rotkatalogen til nettstedet.

Dermed installerte vi PHPMailer-biblioteket. Deretter kan vi begynne å lage et skript som vi sender e-postmeldinger med fra nettsiden vår.

Vi lager et script for å sende e-post via SMTP

For å komponere skriptet er det nok å bruke anbefalingene for bruk av PHPMailer gitt på GitHub-siden, som vi tidligere brukte til å laste ned biblioteket.

De indikerer spesielt at i begynnelsen av skriptet er det nødvendig å importere PHPMailer-klasser til det globale navneområdet. Og spesifikke linjer med tilsvarende kode er gitt. Det er også eksempler på bruk av egenskapene og metodene til PHPMailer, inkludert for muligheten til å sende e-post via SMTP.

Men hvis dette ikke er nok, kan du også bruke dokumentasjonen, som inneholder en beskrivelse av alle egenskapene og metodene til dette biblioteket.

skjermbilde 74

Nedenfor er skriptkoden for å sende post fra tilbakemeldingsskjemaet via SMTP med autorisasjon. Hvor alle linjene relatert til PHPMailer er gitt med forklaring og uthevet med lys bakgrunn.

Resten av delen, inkludert fragmenter knyttet til mottak og behandling av data fra skjemaet, som vi tidligere måtte bruke i andre prosessorer, er indikert med en mørk bakgrunn. De ble diskutert i noen detalj tidligere i en artikkel viet spesifikt til spørsmålene om innhenting og verifisering av data fra et skjema i PHP. Der vi også snakket om den universelle brukerfunksjonen for validering og behandling av skjemadata check_symbol().

Vi vil plassere dette skriptet i den samme kontakty.php-filen som vi tidligere opprettet tilbakemeldingsskjemaet i.

    //----Skript for å sende e-post via SMTP med PHPMailer----

    //Importer PHPMailer-klasser til det globale navneområdet. De skal være øverst i skriptet, ikke inne i funksjonen

    bruk PHPMailer\PHPMailer\PHPMailer ;

    bruk PHPMailer\PHPMailer\Unntak ;

    hvis (!tømme($_POST["kontakt-knapp" ])) (

    $navn = $_POST["kontaktnavn" ];

    $navn = check_symbol ($navn, "Navn", "1", "/^+\z/iu" );

    $email = $_POST["kontakt-e-post" ];

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

    $subject = $_POST["kontaktemne" ];

    $subject = check_symbol ($subject, "Meldingsemne" , "1" , "0" );

    $comment = $_POST["kontaktkommentar" ];

    $comment = check_symbol ($comment, "Meldingstekst", "1" , "0" );

    hvis (!tømme($GLOBALS["alert" ])) (

    $alert = "Skjemadataene ble ikke sendt. Følgende feil ble funnet:\n".$alert;

    inkludere"alert.php" ;

    ellers {

    //Koble til biblioteket

    krever"PHPMailer/src/PHPMailer.php" ;

    krever"PHPMailer/src/Exception.php" ;

    krever"PHPMailer/src/SMTP.php" ;

    $mail = ny PHPMailer(); //Klasseinitialisering

    $fra = " [e-postbeskyttet]" ; //E-postadresse som brevet er sendt fra

    $to = " [e-postbeskyttet]" ; //Adressen til mottakeren

    $mail -> isSMTP(); //Bruk SMTP-protokoll

    $mail -> Host = "smtp.yandex.ru" ; //E-postserveradresse

    $mail -> SMTPAuth = ekte ; //Aktiver autorisasjonsmodus

    $mail -> Brukernavn = " [e-postbeskyttet]" ; //Logg på fra en domene-e-post som er koblet til en tredjeparts e-posttjeneste (i dette tilfellet Yandex.Mail)

    $mail -> Passord = "27MrDon89" ; //Passord for domenepost

    $mail -> SMTPSecure = "ssl" ; //Krypteringsprotokoll

    $mail -> Port = "465" ; //SMTP-serverport

    $mail -> CharSet = "UTF-8" ; //Koding

    $mail -> setFrom ($from, "Administrator" ); //Adresse og navn på avsender

    $mail -> addAddress ($to, "Administrator" ); //Mottakers adresse og navn

    $mail -> isHTML ( ekte ); //Sett e-postformat til HTML

    $mail -> Emne = "Tilbakemeldingsskjema sendt inn"; //E-postemne (overskrift)

    $mail -> Brødtekst = "

    Avsenders navn: $navn

    Avsenders adresse: $e-post

    Meldingsemne: $emne

    Meldingsinnhold: $comment



    " ; //Meldingens innhold

    $mail -> AltBody = "Alternativ bokstavtekst"; //Alternativ e-post hvis e-postklienten ikke støtter HTML-format

    $mail -> SMTPDebug = 0 ; //Aktiver SMTP-feilsøking: 0 - av (for normal bruk), 1 = klientmeldinger, 2 - klient- og servermeldinger

    hvis($mail -> send()) (

    $alert = "Melding sendt"; //Skriv ut en melding i nettleserdialogboksen om vellykket sending av brevet

    ellers {

    $alert = "Feil, e-post kan ikke sendes: ".$mail -> ErrorInfo ; //Skriv ut en feilmelding

    inkludere"alert.php" ;

Fig.5 Skript for å sende e-post via SMTP med autorisasjon

Som du kan se, er alle linjer som er direkte relatert til å sende en e-postmelding, der de nødvendige metodene og egenskapene er spesifisert, ledsaget av kommentarer. Derfor gir det ingen mening å gjenta oss selv, men vi kan bare dvele ved noen av dem, som faktisk krever ytterligere forklaringer, nemlig:

1. På grunn av at brevet er sendt fra en tredjeparts posttjeneste, brukes innstillingene som tilsvarer den spesifikke SMTP-serveren her. I dette tilfellet, for bruk av Yandex.Mail-serveren, brukes følgende egenskapsverdier:

  • Eiendom Vert(pos.28) - E-postserveradresse med verdien smtp.yandex.ru;
  • Eiendom SMTPSikker
  • Eiendom Havn

Disse egenskapsverdiene ble hentet fra Yandex.Help-siden vist i følgende skjermbilde.

Men slik informasjon kan også hentes fra andre ressurser. For å gjøre dette, skriv bare inn den aktuelle spørringen i en søkemotor, for eksempel: "Yandex smtp-server". Hvor kan du finne et stort antall referanser om dette problemet.

På lignende måte kan innstillingsverdier hentes fra andre SMTP-servere. Nedenfor er et skjermbilde av Mail.ru-hjelpesiden, som viser innstillingene til SMTP-serveren til Mail.ru-posttjenesten.

Og derfor, i tilfelle du bruker Mail.ru som en tredjeparts SMTP-server, bør følgende verdier for egenskapene til PHPMailer-klassen brukes:

  • Eiendom Vert(pos.28) - E-postserveradresse (smtp.mail.ru);
  • Eiendom SMTPSikker(pos.32) - Krypteringsprotokoll (ssl);
  • Eiendom Havn(pos. 33) - SMTP-serverport (465).

En lignende tilnærming bør brukes på andre e-posttjenester.

2. I eiendom Brukernavn(pos. 30) er det nødvendig å angi hele adressen til domenepostkassen. I dette tilfellet, " [e-postbeskyttet]".

Men hvis du bruker en annen konto enn en domenepostkonto for å sende brev, men en adresse som er direkte relatert til posttjenesten, for eksempel " [e-postbeskyttet]", så skal påloggingen bare være den delen av adressen opp til "@"-tegnet. I dette tilfellet vil påloggingen ha verdien "feedback".

3. PHPMailer tilbyr en egenskap SMTPDebug(pos. 50), som lar deg vise ulike nivåer av feil på nettleserskjermen. Denne funksjonen forenkler i stor grad å finne problemer ved feilsøking av et skript.

Vanligvis, i normal modus, med verdien satt til 0, er utdata av detaljert feilinformasjon deaktivert. Men hvis det oppstår problemer med å sende e-post, eller under feilsøking, er det mulig å bruke andre verdier for å vise mer meningsfylt informasjon om feilen.

For å se hvordan dette ser ut i praksis, la oss midlertidig introdusere noen feil i innstillingene. For eksempel i domenepostpassordet (property Passord, pos.31). Og også for å vise detaljert informasjon om feilen, midlertidig satt i eiendommen SMTPDebug(pos.50) verdi 1. Etter, når alt er feilsøkt og sjekket, vil vi deaktivere SMTP-feilsøkingsmodusen, og erstatte 1 med 0.

I den siste delen av skriptet, etter å ha spesifisert alle nødvendige egenskaper og metoder, brukes metoden for å sende brevet sende()) (pos. 51). Og hvis brevet er sendt, og metoden sende() for objekt $mail returnerer sant, deretter i nettleserdialogen gjennom variabelen $alert En melding om vellykket e-postsending vil vises (pos. 52).

Hvis e-posten av en eller annen grunn ikke kunne sendes, og metoden følgelig ikke kunne returnere sann, vil denne tilstanden bli ledsaget av en tilsvarende feilmelding (pos. 55).

Sjekker e-postsending

Etter at vi har laget et skript for å sende e-post, må vi naturligvis se på resultatet av vår "kreativitet". Har vi tatt hensyn til alt her, og har vi ikke gjort noen feil?

For å gjøre dette, la oss prøve, som ment, å sende en melding fra brukeren til nettstedadministratoren fra tilbakemeldingsskjemaet. Nedenfor er et skjermbilde av tilbakemeldingsskjemaet med feltene fylt ut før det sendes inn.

Og her er resultatet av innsending av skjemaet.

Hvor det, fra meldingen i nettleserdialogboksen, er klart at brevet ikke kan sendes på grunn av et problem med SMTP-tilkoblingen.

Men, siden nå eiendommen SMTPDebug(pos. 50) er tildelt verdien 1, så kan vi se detaljert informasjon om feilen som oppsto og finne ut årsaken til at den oppsto.

Følgende skjermbilde viser at når du prøver å koble til, ble det oppdaget en autentiseringsfeil, noe som betyr bruk av feil pålogging eller passord.

Etter å ha eliminert passordmismatchet (tidligere ble et feil passord brukt for å kunne sjekke utdata av tilleggsinformasjon om feilen), vil vi prøve å sende e-posten på nytt.

Denne gangen så alt ut til å gå bra og vi fikk en melding om at e-posten ble sendt. Tilsynelatende, bortsett fra den bevisste midlertidige feilen i domenepostpassordet, gjorde vi ingen andre feil.

Men for å være sikker på at brevet faktisk ble levert til adressaten, la oss skrive inn posten med adressen [e-postbeskyttet] og se på resultatet.

Som du kan se, brevet fra adressen [e-postbeskyttet], hvorfra vi sendte en e-postmelding med navnet "Tilbakemelding" og nådde nettstedadministratoren. Samtidig inneholder brødteksten alt innholdet som vi genererte i skriptet ved å bruke data mottatt fra tilbakemeldingsskjemaet, nemlig:

  • Avsenderens navn: Nikolay;
  • Avsenders adresse: [e-postbeskyttet];
  • Meldingsemne: Sjekker e-postsending;
  • Meldingsinnhold: Testmelding.

Nå, etter å ha sjekket e-postsendingen, kan du deaktivere SMTP-feilsøkingsmodusen ved å tilordne egenskapen SMTPDebug(pos.50) verdi 0.

Dermed fullførte vi oppgaven med å lage et verktøy for å sende e-post via SMTP med autorisasjon ved hjelp av en tredjeparts e-postserver.

For eksempel, i neste artikkel, vil vi se på hvordan du sender bekreftelses-e-poster for å gjenopprette registrerte brukerkontodata.

Nettstedets kildefiler

Kildefilene til nettstedet med oppdateringene som ble gjort i denne artikkelen kan lastes ned fra det vedlagte tilleggsmaterialet:

  • www-katalogfiler
  • MySQL-databasetabeller

I PHP er det ganske populært å bruke skript som automatiserer prosessen med å sende brev. I denne artikkelen skal vi se på et enkelt skript som sender brev til mottakere via SMTP( Enkel e-postoverføringsprotokoll ). Det ville være for enkelt å begrense oss til kun denne funksjonaliteten; skriptet støtter også vedlegg, det vil si at du kan legge ved en pdf-, txt- eller doc-fil i brevet ditt.

Å sette opp skriptet er ganske enkelt; alt du trenger er avsenderens login og passord for e-posten som brevene skal sendes fra.

Skriptet fungerer med km_smtp_class.php-klassen, det gode med klassen er at den støtter ulike SSL- og TLS-protokoller som gir sikker dataoverføring.

Her er selve manuset:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-postbeskyttet]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // Mottakers e-post $Receiver = " [e-postbeskyttet]"; // Message subject $Subject = "Sender en e-post fra PHP"; // Meldingstekst (i HTML) $Text = "Hei!
Melding sendt fra script Mowshon Nettsted: http://site"; // Vedlegg i brevet - adressen til filen $Attachment = ""; /* $mail = new KM_Mailer(server, port, bruker, passord, type); */ /* Type kan være: null, tls eller ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]); if($mail->isLogin) ( // Legg ved en fil if($Attachment) ($mail->addAttachment($Attachment);) // Legg til flere mottakere $mail->addRecipient( " [e-postbeskyttet]"); $mail->addRecipient(" [e-postbeskyttet]"); /* $mail->send(Fra, For, Emne, Tekst, Emne = valgfritt) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text ); // Tøm listen over mottakere $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( ekko "En feil oppstod mens kobler til SMTP-server"; ) ?>

Skriptoppsettet er hovedsakelig basert på $SenderConfig-matrisen, her må vi spesifisere SMTP:server, port, pålogging og e-postpassord. La oss beskrive hver matrisenøkkel:

SMTP_server - SMTP-serveradresse (individuell adresse for forskjellige e-poster)

Mail.ru e-post: smtp.mail.ru port: 25, 587 og 465 (med SSL-kryptering)

Yandex e-post: smtp.yandex.ru-port: 25, 587 465 (SSL-port)

Rambler mail: mail.rambler.ru port: 25, 587 465 (SSL-port)

Yahoo Mail: smtp.mail.yahoo.com SSL-port: 465

(Hvis du trenger adressen til smtp-servere som ikke er på listen, skriv i kommentarfeltet)

SMTP_port - Vi har allerede beskrevet det ovenfor for hver smtp-server.

SMTP_email - bruker ville være mer presis, men for klarhetens skyld skrev jeg e-post, vi angir e-postadressen.

SMTP_pass - Passord for e-posten som ble spesifisert som en verdi i SMTP_email-nøkkelen


SMTP_type - Standard NULL. Protokollen som brev vil bli sendt etter. Protokoller: SSL og TLS

Du kan legge til vedlegg til et brev ved å spesifisere hele adressen til filen i $Attachment-variabelen (/var/patch/to/file/File.pdf)

Hvis du har spørsmål, skriv dem i kommentarene nedenfor.

Mail PHP

Denne funksjonen er implementert som standard som sending av e-post. Denne funksjonaliteten krever ikke en tredjepartsserver for å videresende e-post. For å sjekke om denne funksjonen er korrekt, lag bare en test.php-fil i mappen med nettstedet og plasser følgende kode der:

Hvor i stedet "E-POSTMOTTAKER" Skriv inn e-posten som brevet skal sendes til.

Plasser denne filen i roten av nettstedet ditt.

Deretter skriver du inn www.YourDomain/test.php i adressefeltet. Hvis et brev er mottatt på den angitte e-posten, fungerer hostingen din korrekt med funksjonen for å sende brev " Mail PHP". Det er mulig at brevet har havnet i spam, så det må også sjekkes.

Hvis brevet kom i en uforståelig koding, endre linjen: "Sjekker e-postsending""Sjekker sending av e-post", "Content-type:text/html;charset=utf-8".

Og gjenta å sende brevet gjennom adressefeltet i nettleseren din.

Hvis testbrevet ikke når den endelige mottakeren etter manipulasjonene ovenfor, må du kontakte din vertstekniske støtte.

Blant ulempene med denne metoden er det verdt å merke seg at denne metoden ikke fungerer konsekvent. Det kan være avbrudd i sendingen av e-poster på vertssiden.

Den største ulempen med denne metoden er at alle brev som sendes til kundenes e-post ikke vil bli gjenkjent av e-posttjenester (gmail, mail.ru, yandex.ru) da de ble sendt direkte fra nettstedet ditt.

Gmail-e-posttjenesten viser disse bokstavene med et spørsmålstegn og signatur: «Gmail-systemet kunne ikke bekrefte at dette brevet ble sendt fra domenet YourDomain. Dette kan være spam.»

For å unngå denne situasjonen .

SMTP (Simple Mail Transfer Protocol)

SMTP - protokoll for e-postoverføring. Totalt, for å sette opp e-postoverføring ved hjelp av denne protokollen, trenger du selve SMTP-serveren. Det vanligste alternativet for å bruke bedrifts (domene) e-post yandex.ru som en SMTP-server er https://pdd.yandex.ru/.

Først av alt er det nødvendig konto (post) yandex, på grunnlag av hvilke e-poster vil bli opprettet for ditt domene: “ordre@YourDomain” “info@YourDomain”... Hovedkontoen vil ikke være synlig noe sted og brukes kun til å lage domene-e-poster basert på den i fremtiden.

Etter autorisasjon i din personlige Yandex-konto, opprettes en domenepost på lenken https://pdd.yandex.ru/. Dette er domene-e-posten som brukere vil se i "Avsender"-feltet.

"Avsender"-feltet er obligatorisk når du sender e-post via SMTP. Bruke SMTP til å sende brev, en kombinasjon av " Domene" - "E-post", og dermed gjenkjennes brevene av posttjenester.


Blant ulempene med denne metoden er det verdt å merke seg umuligheten av å "laste" et domenepostportrett, siden e-posttjenestene i seg selv ennå ikke tilbyr denne funksjonaliteten.




Topp