Codice di autorizzazione SMTP. Invio di e-mail (SMTP o posta PHP). Come inviare e-mail utilizzando ASP

Poiché l'invio di messaggi anonimi da server hosting virtuali Windows è proibito, l'invio delle lettere dovrebbe avvenire tramite un server SMTP, per il quale è anche possibile utilizzare il nostro sistema di posta.

Come inviare e-mail utilizzando PHP?

Utilizzando qualsiasi classe PHP che supporti l'autorizzazione sul server SMTP. Ad esempio, puoi utilizzare il set di classi PHPMailer.

Puoi anche utilizzare il nostro esempio, che implementa l'invio di lettere utilizzando un server SMTP, che richiede autorizzazione. Pertanto, non dimenticare di aggiungere allo script i dettagli di accesso appropriati, ad esempio:

// Se è necessario mostrare il registro della sessione SMTP, è possibile rimuovere il commento dalla riga seguente. // $_SERVER["debug"] = vero; funzione MailSmtp ($destinatario, $oggetto, $contenuto, $intestazione, $debug = 0) ($smtp_server = "smtp.sito"; // Indirizzo del server SMTP$porta_smtp = 25 ; // Porta del server SMTP$utente_smtp = " [e-mail protetta]" ; // Nome utente per l'autorizzazione sul server SMTP$smtp_password = "pAsSwORd"; // Password per l'autorizzazione sul server SMTP$mail_da = " [e-mail protetta]" ; // Casella postale da cui viene inviata la lettera$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($calzino, 512); if (! $sock ) ( printf ("Il socket non è stato creato\n" ); exit(1 ); ) smtp_msg ($sock, "HELO". $_SERVER [ "NOME_SERVER" ]); smtp_msg($sock, "LOGIN AUTORIZZATO"); smtp_msg ($sock, base64_encode ($smtp_user)); smtp_msg ($sock, base64_encode ($smtp_password)); smtp_msg ($sock, "MAIL DA:<" . $mail_from . ">" ); smtp_msg ($calzino, "RCPT TO:<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Oggetto: " . $oggetto . "\r\n" . $headers ; $dati = $headers . "\r\n\r\n" . $contenuto . "\r\n." ; smtp_msg ($calzino, $dati ) ( if (! $calzino) ( printf ("Socket rotto!\n"); exit(1); ) if (isset($ _SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ("Invia da noi: %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ("Il socket è down\n" ); exit(1); ) else ( if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ("Ottenuto dal server: %s
" , nl2br (htmlspecialchars ($str )); ) $e = esplode (" " , $str ); $code = array_shift ($e ); $str = implode (" ", $e ); if ($code > 499) (printf ( "Problemi con la conversazione SMTP.

Codice %d.
Messaggio %s
"
, $codice , $str ); uscita(1); ) ) ) ?>

Scarica un esempio di script già pronto con la funzione MailSmtp(): smtpauth.php.sample

Puoi utilizzare la funzione MailSmtp() descritta sopra per sostituire direttamente la funzione mail() considera un esempio della forma più semplice in PHP:

// Intestazioni dei messaggi, definiscono la codifica del messaggio, i campi Da, A, ecc.$headers = "Versione MIME: 1.0\r\n" ; $intestazioni .= "Tipo di contenuto: text/html; charset=windows-1251\r\n"; $intestazioni .= "A: $a \r\n" ; $intestazioni .= "Da: nome del mittente " ; // posta ($a, $oggetto, $messaggio, $intestazioni); require_once "smtpauth.php"; MailSmtp ($a, $oggetto, $messaggio, $intestazioni); ) ?>
A cui: Soggetto: Testo: 
 
 

In modo da questa forma funzionava senza la funzione mail(), abbiamo incluso il file smtpauth.php tramite require_once e chiamato la funzione MailSmtp() descritta in esso, con argomenti simili a mail(). Allo stesso tempo, abbiamo commentato la stessa chiamata mail() nel codice per evitare errori durante l'esecuzione dello script.

Come inviare e-mail utilizzando ASP.NET?

Se stai utilizzando la versione 2.0, utilizza la classe MailMessage System.Net.Mail), ben descritto.

Di seguito sono riportati esempi del suo utilizzo per i linguaggi C# e VisualBasic:

Esempio per il linguaggio C#:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // creando una nuova lettera messaggio.To.Add(" [e-mail protetta]"); // aggiunta dell'indirizzo del destinatario messaggio.From = new MailAddress("da@ dominio.tld", "Nome del mittente"); // specificando il nome e l'indirizzo del mittente message.Subject = "Oggetto del messaggio"; // specificando l'oggetto della lettera messaggio.BodyEncoding = System.Text.Encoding.UTF8; // specificando la codifica delle lettere messaggio.IsBodyHtml = falso; // specificando il formato della lettera (true - HTML, false - non HTML) message.Body = "Testo del messaggio"; // specificando il testo (corpo) della lettera Client SmtpClient = nuovo SmtpClient("smtp.site",25); //creazione di una nuova connessione al server "smtp.site" client.DeliveryMethod = SmtpDeliveryMethod.Network; // definisce il metodo per l'invio dei messaggi client.EnableSsl = falso; // disabilita la necessità di utilizzare una connessione sicura al server client.UseDefaultCredentials = false; // disabilita l'uso dei dettagli di autorizzazione predefiniti client.Credentials = new NetworkCredential("postmaster@ dominio.tld", "***parola d'ordine***"); // specificando i dettagli necessari (nome utente e password) per l'autorizzazione sul server SMTP cliente.Invia(messaggio); // mandare un messaggio %>

Scarica un esempio di modulo compilato che dimostra l'utilizzo questo metodo: MailForm.aspx.

Esempio per il linguaggio 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@dominio.tld", "Nome_mittente") smtpMssg.To.Add (" [e-mail protetta]") " aggiungendo l'indirizzo del destinatario smtpMssg.Subject = "Oggetto dell'e-mail" "indicazione dell'oggetto della lettera smtpMssg.Body = "Testo del messaggio" "indicazione del testo (corpo) della lettera smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 " indicazione della codifica delle lettere smtpMssg.IsBodyHtml = falso " indicazione del formato della lettera (true - HTML, false - non HTML) Oscura SmtpMail come nuovo SmtpClient("smtp.site", 25) " dichiarazione di un nuovo oggetto di tipo "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network "indicazione della modalità di consegna della lettera SmtpMail.UseDefaultCredentials = False "disabilitare l'uso delle credenziali di autorizzazione per impostazione predefinita" SmtpMail.EnableSsl = Falso " disabilita la necessità di utilizzare una connessione sicura al server SmtpMail.Credentials = new NetworkCredential("postmaster@ dominio.tld", "***parola d'ordine***") "indicando i dati necessari (nome utente e password) per l'autorizzazione sul server SMTP SmtpMail.Send(smtpMssg) "invio di un messaggio %>

Esiste anche una classe SmtpMail deprecata (e deprecata) (che utilizza lo spazio dei nomi System.Web.Mail). Di seguito è riportato un esempio del suo utilizzo per il linguaggio VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " dichiarazione di un nuovo oggetto di tipo "MailMessage" smtpMssg.From = "Nome_mittente dominio.tld>" "Indicazione del nome e dell'indirizzo del mittente smtpMssg.To = "amministratore@ dominio.tld" "indicazione dell'indirizzo del destinatario smtpMssg.BodyFormat = MailFormat.Testo "indicazione del formato della lettera smtpMssg.BodyEncoding = Codifica.UTF8 "indicando la codifica delle lettere smtpMssg.Subject = "Oggetto dell'e-mail" "indicazione dell'oggetto della lettera smtpMssg.Body = "Testo del messaggio" "indicazione del testo della lettera smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "indicando la necessità dell'autorizzazione SMTP sul server smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ dominio.tld") "nome utente per l'autorizzazione smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***password***") "password per l'autorizzazione SmtpMail.SmtpServer = "smtp.sito" " specificando l'indirizzo del server SMTP SmtpMail.Send(smtpMssg) "invio di un messaggio %>

Come inviare e-mail utilizzando ASP?

Tieni presente che quando si utilizza il nostro server SMTP è richiesta l'autorizzazione, quindi non dimenticare di aggiungere i dettagli di accesso appropriati allo script, ad esempio:

<% 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@dominio.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") With cdoMessage Set .Configuration = iConfig .From = "Utente di prova dominio.tld>" .To = "Utente " .Subject = "Ciao utente" .TextBody = "Scrivo questo messaggio dallo script ASP." .Send End With Set cdoMessage = Nothing Set iConfig = Nothing %>

Alcuni CMS dispongono già di strumenti integrati per l’invio della corrispondenza o di moduli corrispondenti. Vediamo quelli più diffusi;

WordPress

Per questo CMS esiste un modulo speciale “WP Mail SMTP”, un esempio della sua configurazione è descritto nella pagina del modulo.

Prestare attenzione all'illustrazione nell'esempio; nel nostro sistema di posta è necessario utilizzare la porta 25 e la crittografia SSL non è richiesta.

Joomla

Nel pannello di amministrazione, vai alla sezione "Impostazioni generali", seleziona la scheda "Server". Nel campo "Posta", è necessario selezionare il metodo di invio come "server SMTP", nei campi "Indirizzo server SMTP" e "Login SMTP" e "Password SMTP" specificare i dettagli appropriati del sistema di posta, ad esempio: smtp.sito, box@tuo_dominio e corrispondente parola d'ordine.

Drupal

Questo CMS dispone anche di un proprio modulo per lavorare con un server SMTP, basato su PHPMailer. Puoi scaricare questo modulo dalla sua pagina sul sito web CMS Drupal; una descrizione dell'installazione del modulo è disponibile nell'archivio insieme ad esso.

NetCat

Questo CMS non dispone di funzioni integrate per lavorare con un server SMTP. Per inviare posta utilizzando gli script del sito, possiamo offrire di utilizzare la nostra soluzione per collegarlo, è necessario eseguire i seguenti passaggi:

  • Scarica un archivio con i file necessari dal nostro sito Web ( send_auth_mail.php E mail.inc.php) e decomprimerlo sul tuo computer;
  • Modifica file send_auth_mail.php dall'archivio, indicando in esso i dettagli della connessione al server SMTP desiderato:

    • $mail_smtpServer = "smtp.sito"; (Indirizzo del server SMTP)
    • $porta_posta = "25" ; (porta di connessione)
    • $nome_utente_mail = "[e-mail protetta]" ; (nome utente per l'autorizzazione sul server SMTP)
    • $password_e-mail = "Parola d'ordine"; (password per l'autorizzazione sul server SMTP)
  • Creare una copia di backup del file dominio.tld/www/netcat/admin/mail.inc.php;
  • scaricare files send_auth_mail.php E mail.inc.php al sito virtuale nella directory dominio.tld/www/netcat/admin/

dominio.tld dovrebbe essere sostituito con il tuo nome di dominio.

La soluzione proposta funziona con tutti i moduli NetCat che utilizzano le funzioni standard di questo CMS per inviare posta.

Per molto tempo stavo cercando una soluzione per inviare lettere agli utenti non tramite la funzione mail() in PHP, ma tramite server di posta SMTP. Su Internet non si trovano molte informazioni diverse e ciò che è disponibile non funziona del tutto correttamente o non funziona affatto. Pertanto, ho messo tutto insieme e ho scritto il mio codice, basato su quelli già pronti presentati sui siti.

Perché inviare tramite SMTP e non tramite posta()

La mia risposta è abbastanza semplice: per qualche tempo i virus hanno inviato tonnellate di lettere attraverso il mio server, il che ha portato il mio indirizzo IP a essere BANNATO da molti mailer, in particolare gmail.com, e in relazione a ciò, gli utenti potevano ricevere lettere, quindi io ho dovuto cercare un'alternativa e l'ho trovata: questo è SMTP

Potresti essere interessato al motivo per cui la mia sceneggiatura è migliore di altre che sono in giro allo scoperto?! risponderò

  1. Funziona con Yandex, Rambler, Mail (gmail non ha potuto vincere)
  2. Codice chiaro. Per configurarlo basta modificare poche righe
  3. Invia e-mail in formato HTML

Ecco i vantaggi della mia sceneggiatura, che non ho trovato da nessuna parte su Internet, ma da ognuna ho preso tutto ciò di cui avevo bisogno. Quindi, diamo un'occhiata al codice.

Funzione smtpmail($mail_to, $oggetto, $messaggio, $servizio="yandex") ( $config["smtp_charset"] = "windows-1251"; //codifica messaggio. (o UTF-8, ecc.) $config [ "smtp_from"] = "mashintop.ru"; //Il tuo nome - o il nome del tuo sito verrà mostrato nel campo "Da" quando viene letto $config["smtp_debug"] = false; per visualizzare i messaggi di errore, specifica true invece di false $config["smtp_port"] = "25" // Non modificare la porta di lavoro se non sei sicuro ru"; $config["smtp_email"] = " [e-mail protetta]"; $config["smtp_username"] = "mashintop"; //Cambia il nome della tua casella di posta. $config["smtp_host"] = "smtp.yandex.ru"; //server per l'invio della posta $config[" smtp_password "] = "moi_parol"; //Cambia la password ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-mail protetta]"; $config["smtp_username"] = "mashintop"; //Cambia il nome della tua casella di posta. $config["smtp_host"] = "smtp.rambler.ru"; //server per l'invio della posta $config[" smtp_password "] = "moi_parol"; //Cambia la password ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-mail protetta]"; $config["smtp_username"] = "mashintop"; //Cambia il nome della tua casella di posta. $config["smtp_host"] = "smtp.mail.ru"; //server per l'invio della posta $config[" smtp_password "] = "moi_parol"; //Cambia password ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-mail protetta]"; $config["smtp_username"] = "alexeybertram"; //Cambia il nome della tua casella di posta. $config["smtp_host"] = "smtp.gmail.com"; //server per l'invio della posta $config[" smtp_password "] = "moi_parol"; //Cambia password ) $header="Data: ".date("D, j M Y G:i:s")." +0700rn"; $header.="Da: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="X-Mailer: Il pipistrello! (v3.99.3) Professionalrn"; $header.="Rispondi a: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="Priorità X: 3 (Normale)rn"; $header.="ID messaggio:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="A: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Oggetto: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="Versione MIME: 1.0rn"; $header.="Tipo di contenuto: text/html; charset=windows-1251rn"; $header.="Codifica trasferimento contenuto: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"].", $config["smtp_port"],$errno , $errstr, 10); if(!$smtp_conn) (print "connessione dai server non riuscita"; 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) (stampa "Errore saluto EHLO"; fclose($smtp_conn) ; exit;) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000 if($code != 334) (print "il server non ha consentito l'avvio dell'autorizzazione"; fclose ($smtp_conn); esci;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000 ) ; if($code != 334) (print "errore durante l'accesso a questo utente"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn"); $codice = substr(get_data($smtp_conn),0,3000 if($codice!= 235) (stampa "password errata"; fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL DA:".$config["smtp_email"]."rn"); $codice = substr(get_data($smtp_conn),0.3000); if($code != 250) (print "il server ha rifiutato il comando MAIL FROM"; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $codice = substr(get_data($smtp_conn),0.3000); if($code != 250 AND $code != 251) (print "Il server non ha accettato il comando RCPT TO"; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $codice = substr(get_data($smtp_conn),0.3000); if($code != 354) (print "il server non ha accettato i DATI"; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $codice = substr(get_data($smtp_conn),0.3000); if($code != 250) (print "errore nell'invio della lettera"; fclose($smtp_conn); exit;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) funzione get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $dati; ) $testo_email = " Hai appena aggiunto un annuncio sul sito mashintop.ru. Puoi vederlo qui
La tua chiave: ".$key."

Usando questa chiave puoi gestire il tuo annuncio.

"; $testo_email .= " "; smtpmail(" [e-mail protetta]", "La chiave dell'annuncio su mashintop.ru", $text_email, "yandex"); //usa Yandex smtpmail(" [e-mail protetta]", "La chiave per l'annuncio su mashintop.ru", $text_email, "mail"); //usa l'e-mail smtpmail(" [e-mail protetta]", "La chiave per l'annuncio su mashintop.ru", $text_email, "rambler"); //usa rambler smtpmail(" [e-mail protetta]", "La chiave per la pubblicità su mashintop.ru", $text_email, "gmail"); // ma Gmail non funziona :(

Questo è tutto, lo script finito è nelle tue mani, basta copiarlo, modificare i valori dell'array $config e tutto funzionerà bene.

Vediamo ora alcuni elementi su cui vorrei soffermarmi.

Ad esempio, l'errore che riceviamo quando proviamo a inviare tramite SMTP a Google. Inizialmente vediamo questo testo di errore:

Per vedere qualcosa di più specifico, modifichiamo leggermente il codice

Fputs($smtp_conn,"AUTO LOGINrn"); $codice = substr(get_data($smtp_conn),0.3000); echo $codice; if($code != 334) (print "il server non ha consentito l'autorizzazione per iniziare"; fclose($smtp_conn); exit;)

E alla fine otteniamo un errore molto specifico

530 5.7.0 È necessario prima emettere un comando STARTTLS. x4sm16408296lbn.2 - gsmtp

Non so cosa significhi esattamente, ma credo che abbia qualcosa a che fare con una connessione sicura e non protetta. Non so ancora come sbarazzarmene, quindi Gmail rimane imbattuto al momento.



2019-08-05

Ciao, caro visitatore!

Perdonatemi il ritardo nell'aggiornamento del blog. Ma c'è una spiegazione del tutto comprensibile per questo. Dopotutto era l'estate, la dacia, gli ospiti, il bosco, l'acqua e molto altro, che non mi permetteva di affrontare i problemi della creazione di un sito web. Ma ora mi sono liberato un po', gli ospiti se ne sono andati, e penso che ora potrò sicuramente prestare la dovuta attenzione a questo.

Quindi, dopo che nello scorso articolo abbiamo collegato la posta del nostro dominio ad uno dei servizi di posta, ora vediamo come è possibile inviare email dal sito. Inoltre, in modo tale che le nostre lettere non finiscano nello SPAM, ma vengano consegnate in modo affidabile e con un alto grado di probabilità ai nostri destinatari.

In generale, esiste una funzione mail() integrata per inviare lettere in PHP. Ma va notato che nonostante la semplicità di questo metodo (in questo caso per inviare lettere è sufficiente specificare una sola riga di codice con determinati parametri), l'utilizzo di questa opzione presenta un notevole inconveniente legato al problema dello SPAM .

Il fatto è che i filtri anti-SPAM dei server di posta dal lato del destinatario non favoriscono realmente le lettere inviate tramite la funzione mail(). E nella maggior parte dei casi, tali messaggi vengono filtrati o addirittura cancellati prima di raggiungere il destinatario.

E per eliminare il più possibile tali casi, di solito viene utilizzata un'altra opzione, in cui le lettere vengono inviate come se ciò fosse effettuato da un servizio di posta di terze parti.

Questo metodo è chiamato invio di posta tramite SMTP con autorizzazione. Che esamineremo oggi utilizzando l'esempio dell'invio di un modulo di feedback. Inoltre, per questo utilizzeremo la libreria PHPMailer, abbastanza nota e popolare, che consente di organizzare in modo molto semplice l'invio di lettere tramite SMTP.

  • Come invieremo le lettere di feedback
  • Creazione di un modulo di feedback
  • Installazione della libreria PHPMailer
  • Creiamo uno script per l'invio di posta tramite SMTP
  • Controllo dell'invio di e-mail
  • File di origine del sito

Come invieremo le lettere di feedback

Prima di iniziare il lavoro pratico relativo all'invio di lettere di feedback, decidiamo innanzitutto come lo faremo.

Il modulo di feedback è progettato per consentire all'utente di comunicare con l'amministratore del sito per trasmettere il suo messaggio. In genere, questo modulo è composto da diversi campi e un pulsante "Invia".

In linea di principio per inviare una email è sufficiente utilizzare solo pochi campi che forniscano informazioni sufficienti sull’utente e sul contenuto del messaggio, come ad esempio:

  • "Nome" - per inserire il nome del mittente del messaggio;
  • "E-mail" - per l'indirizzo e-mail del mittente;
  • "Soggetto del messaggio";
  • "Messaggio di testo".

Anche se puoi aggiungerne altri. Ad esempio, un numero di telefono, se è veramente necessario.

Nel nostro caso tali lettere verranno inviate all'indirizzo dell'amministratore del sito da una vera e propria casella di posta con autorizzazione sul servizio di posta a cui è collegato il nostro dominio.

Poiché nell'articolo precedente ci siamo concentrati sulla verifica della connessione della posta del dominio al servizio Yandex.Mail, invieremo la posta per questa opzione. Anche se questo non è importante. Di seguito vedrai quelle opzioni che, una volta modificate, ti permetteranno di inviare e-mail tramite il server di posta Mail.ru.

Come vera e propria casella di posta da cui verranno inviate le lettere, utilizzeremo l'account di un utente di posta del dominio appena creato, diciamo con l'indirizzo [e-mail protetta]. E invieremo queste lettere alla casella di posta dell'amministratore [e-mail protetta], che abbiamo precedentemente creato nell'articolo precedente.

Pertanto, il mittente della lettera dal modulo di feedback sarà la casella di posta [e-mail protetta]., e il destinatario - [e-mail protetta]. In questo caso, tutte le informazioni sull'utente che ha inviato il messaggio con il suo contenuto verranno trasmesse nel corpo della lettera inviata.

Creazione di un modulo di feedback

Dopo aver deciso la procedura per l'invio delle lettere, creeremo ora un modulo di feedback con il quale lo faremo.

Di seguito è riportato il codice HTML per questo modulo, che inseriremo nella pagina "Contatti" (file kontakty.php nella directory articoli).

    "articolo" >

    Contatti

    Feedback

    "contatto" azione = "#" metodo = "inviare" >

    Modulo di feedback

    Per tutte le domande, richieste e proposte commerciali, potete contattarci tramite il modulo di feedback sottostante.

    "blocco contatti" >

    "ingresso-contatto" >

    "testo" id = "Nome del contatto" nome = "Nome del contatto" titolo = "Il nome deve essere in russo e contenere almeno 3 caratteri" modello = "{3,}" richiesto>

  1. "contatto vuoto" >

    "ingresso-contatto" >

    "e-mail" id = "contatto email" nome = "contatto email" richiesto>

  2. "oggetto-contatto" >

  3. "contatto-commento" >

  4. "pulsante di contatto" >

    "invia" nome = "pulsante di contatto" valore = "Inviare" >

Fig.1 Codice HTML del modulo di feedback

Puoi vedere come appare il modulo di feedback mostrato qui nello screenshot seguente.

Pertanto, viene creata la forma desiderata. E ora puoi passare alle questioni relative all'elaborazione e all'invio dei dati sotto forma di messaggio di posta elettronica.

Installazione della libreria PHPMailer

Come accennato in precedenza, per l'invio della posta utilizzeremo la libreria PHPMailer, che semplificherà notevolmente l'invio di posta elettronica tramite il protocollo SMTP con autorizzazione su un servizio di posta di terze parti.

Per installarlo è necessario scaricare i file necessari. Questo può essere fatto dal servizio web GitHub utilizzando Composer (un gestore delle dipendenze dei pacchetti per PHP). Oppure scarica semplicemente i file necessari nel solito modo.

schermata 73

Di seguito è riportata la pagina del servizio web GitHub, dove è contrassegnato il collegamento al download regolare della libreria PHPMailer.

Inoltre, l'ultima versione 6.0.7, salvata al momento della stesura di questo articolo, può essere scaricata dai materiali allegati.

In ogni caso, il file di archivio risultante dovrebbe essere decompresso, dopodiché la cartella PHPMailer-master estratta con tutto il suo contenuto dovrebbe essere posizionata nella radice del sito. Allo stesso tempo, per semplicità, puoi rinominarlo PHPMailer. Di seguito è riportato il contenuto della cartella PHPMailer posta nella directory root del sito.

Quindi abbiamo installato la libreria PHPMailer. Dopodiché possiamo iniziare a creare uno script con il quale invieremo messaggi email dal nostro sito web.

Creiamo uno script per l'invio di posta tramite SMTP

Per comporre lo script è sufficiente utilizzare i consigli per l'utilizzo di PHPMailer riportati nella pagina GitHub, che abbiamo utilizzato in precedenza per scaricare la libreria.

In particolare indicano che all'inizio dello script è necessario importare le classi PHPMailer nello spazio dei nomi globale. E vengono fornite righe specifiche di codice corrispondente. Esistono anche esempi di utilizzo delle proprietà e dei metodi di PHPMailer, inclusa la possibilità di inviare posta tramite SMTP.

Ma se ciò non bastasse, puoi anche utilizzare la documentazione, che contiene una descrizione di tutte le proprietà e i metodi di questa libreria.

schermata 74

Di seguito è riportato il codice script per l'invio di posta dal modulo di feedback tramite SMTP con autorizzazione. Dove tutte le righe relative a PHPMailer sono fornite di spiegazione ed evidenziate con uno sfondo chiaro.

Il resto della parte, compresi i frammenti relativi alla ricezione e all'elaborazione dei dati dal modulo, che in precedenza dovevamo utilizzare in altri processori, è indicato da uno sfondo scuro. Sono stati discussi in dettaglio in precedenza in un articolo dedicato specificamente alle questioni relative all'ottenimento e alla verifica dei dati da un modulo in PHP. Dove abbiamo parlato anche della funzione utente universale per la convalida e l'elaborazione dei dati dei moduli simbolo_controllo().

Inseriremo questo script nello stesso file kontakty.php in cui abbiamo precedentemente creato il modulo di feedback.

    //----Script per inviare posta tramite SMTP utilizzando PHPMailer----

    //Importa le classi PHPMailer nello spazio dei nomi globale. Dovrebbero essere nella parte superiore dello script, non all'interno della funzione

    utilizzo PHPMailer\PHPMailer\PHPMailer ;

    utilizzo PHPMailer\PHPMailer\Eccezione ;

    Se (!vuoto($_POST["pulsante di contatto"])) (

    $nome = $_POST["nome-contatto"];

    $nome = simbolo_di_controllo ($nome, "Nome" , "1" , "/^+\z/iu" );

    $e-mail = $_POST["e-mail di contatto"];

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

    $oggetto = $_POST["oggetto-contatto"];

    $oggetto = simbolo_di_controllo ($oggetto, "Oggetto del messaggio", "1", "0");

    $commento = $_POST["commento-contatto" ];

    $commento = simbolo_di_controllo ($commento, "Messaggio di testo", "1" , "0" );

    Se (!vuoto($GLOBALS["avviso" ])) (

    $avviso = "I dati del modulo non sono stati inviati. Sono stati rilevati i seguenti errori:\n".$avviso;

    includere"avviso.php";

    altro {

    //Collegamento della libreria

    richiedere"PHPMailer/src/PHPMailer.php" ;

    richiedere"PHPMailer/src/Exception.php" ;

    richiedere"PHPMailer/src/SMTP.php" ;

    $posta = nuovo PHPMailer(); //Inizializzazione della classe

    $da = " [e-mail protetta]" ; //Indirizzo email da cui viene inviata la lettera

    $a = " [e-mail protetta]" ; //Indirizzo del destinatario

    $posta -> isSMTP(); //Utilizza il protocollo SMTP

    $mail -> Host = "smtp.yandex.ru" ; //Indirizzo del server di posta

    $posta -> SMTPAuth = VERO ; //Abilita la modalità di autorizzazione

    $mail -> Nome utente = " [e-mail protetta]" ; //Accedi da un dominio email collegato a un servizio email di terze parti (in questo caso, Yandex.Mail)

    $posta -> Password = "27MrDon89" ; //Password per la posta del dominio

    $posta -> SMTPSecure = "ssl"; //Protocollo di crittografia

    $posta -> Porta = "465"; //Porta del server SMTP

    $posta -> CharSet = "UTF-8"; //Codifica

    $mail -> setFrom ($from, "Amministratore"); //Indirizzo e nome del mittente

    $mail -> aggiungiIndirizzo ($to, "Amministratore"); //Indirizzo e nome del destinatario

    $mail -> isHTML ( VERO ); //Imposta il formato email su HTML

    $mail -> Oggetto = "Modulo di feedback inviato"; //Oggetto dell'email (intestazione)

    $posta -> Corpo = "

    Nome del mittente: $nome

    Indirizzo del mittente: $e-mail

    Soggetto del messaggio: $oggetto

    Contenuto del messaggio: $commento



    " ; //Contenuto del messaggio

    $posta -> AltBody = "Testo lettera alternativa"; //E-mail alternativa se il client di posta elettronica non supporta il formato HTML

    $posta -> SMTPDebug = 0; //Abilita il debug SMTP: 0 - disattivato (per l'uso normale), 1 = messaggi client, 2 - messaggi client e server

    Se($posta -> invia()) (

    $avviso = "Messaggio inviato"; //Emette un messaggio nella finestra di dialogo del browser relativo all'avvenuto invio della lettera

    altro {

    $avviso = "Errore, l'e-mail non può essere inviata: ".$mail -> InformazioniErrore; //Emette un messaggio di errore

    includere"avviso.php";

Fig.5 Script per l'invio di email tramite SMTP con autorizzazione

Come puoi vedere, tutte le righe direttamente correlate all'invio di un messaggio di posta elettronica, in cui sono specificati i metodi e le proprietà necessarie, sono accompagnate da commenti. Non ha quindi senso ripeterci, ma possiamo soffermarci solo su alcuni di essi, che anzi necessitano di ulteriori spiegazioni, e cioè:

1. Poiché la lettera viene inviata da un servizio di posta di terzi, qui vengono applicate le impostazioni corrispondenti al server SMTP specifico. In questo caso, per il caso d'uso del server Yandex.Mail, vengono applicati i seguenti valori delle proprietà:

  • Proprietà Ospite(pos.28) - Indirizzo del server di posta con il valore smtp.yandex.ru;
  • Proprietà SMTPSecure
  • Proprietà Porta

Questi valori delle proprietà sono stati presi dalla pagina Yandex.Help mostrata nello screenshot seguente.

Ma tali informazioni possono essere ottenute anche da altre risorse. Per fare ciò, è sufficiente inserire la query appropriata nel motore di ricerca, ad esempio: "Server smtp Yandex". Dove puoi trovare un gran numero di riferimenti su questo problema.

In modo simile, i valori delle impostazioni possono essere ottenuti da altri server SMTP. Di seguito è riportato uno screenshot della pagina della Guida di Mail.ru, che mostra le impostazioni del server SMTP del servizio di posta Mail.ru.

Pertanto, nel caso di utilizzo di Mail.ru come server SMTP di terze parti, dovrebbero essere applicati i seguenti valori delle proprietà della classe PHPMailer:

  • Proprietà Ospite(pos.28) - Indirizzo del server di posta (smtp.mail.ru);
  • Proprietà SMTPSecure(pos.32) - Protocollo di crittografia (ssl);
  • Proprietà Porta(pos. 33) - Porta del server SMTP (465).

Un approccio simile dovrebbe essere applicato ad altri servizi di posta elettronica.

2. Nella proprietà Nome utente(pos. 30) è necessario indicare l'indirizzo completo della casella di posta del dominio. In questo caso, " [e-mail protetta]".

Tuttavia, se utilizzi un account diverso da un account di posta del dominio per inviare lettere, ma un indirizzo correlato direttamente al servizio di posta, ad esempio " [e-mail protetta]", allora il login dovrebbe essere solo la parte dell'indirizzo fino al segno "@". In questo caso il login avrebbe il valore "feedback".

3. PHPMailer fornisce una proprietà SMTPDebug(pos. 50), che consente di visualizzare diversi livelli di errori sulla schermata del browser. Questa funzionalità semplifica notevolmente la ricerca di problemi durante il debug di uno script.

In genere, in modalità normale, con il valore impostato su 0, l'output di informazioni dettagliate sull'errore è disabilitato. Ma se sorgono problemi con l'invio della posta o durante il debug, è possibile utilizzare altri valori per visualizzare informazioni più significative sull'errore.

Per vedere come appare in pratica, introduciamo temporaneamente qualche errore nelle impostazioni. Ad esempio, nella password di posta del dominio (property Parola d'ordine, pos.31). E anche per visualizzare informazioni dettagliate sull'errore, impostate temporaneamente nella proprietà SMTPDebug(pos.50) valore 1. Successivamente, quando tutto sarà debuggato e controllato, disabiliteremo la modalità di debug SMTP, sostituendo 1 con 0.

Nella parte finale dello script, dopo aver specificato tutte le proprietà e i metodi necessari, viene utilizzato il metodo per inviare la lettera Inviare()) (pos. 51). E se la lettera viene inviata e il metodo Inviare() per oggetto $posta restituisce true, quindi nella finestra di dialogo del browser attraverso la variabile $avviso Verrà visualizzato un messaggio relativo all'invio corretto della posta (pos. 52).

Se per qualche motivo la posta non può essere inviata e, di conseguenza, il metodo non può restituire true, questo stato sarà accompagnato da un corrispondente messaggio di errore (pos. 55).

Controllo dell'invio di e-mail

Dopo aver creato uno script per l'invio della posta, naturalmente, dobbiamo guardare il risultato della nostra “creatività”. Abbiamo tenuto conto di tutto e non abbiamo commesso errori?

Per fare ciò, proviamo, come previsto, a inviare un messaggio dall'utente all'amministratore del sito dal modulo di feedback. Di seguito è riportato uno screenshot del modulo di feedback con i campi compilati prima dell'invio.

Ed ecco il risultato dell'invio del modulo.

Dove, dal messaggio nella finestra di dialogo del browser, è chiaro che la lettera non può essere inviata a causa di un problema con la connessione SMTP.

Ma sin da ora la proprietà SMTPDebug(pos. 50) viene assegnato il valore 1, quindi possiamo vedere informazioni dettagliate sull'errore che si è verificato e scoprire il motivo del suo verificarsi.

La schermata seguente mostra che durante il tentativo di connessione è stato rilevato un errore di autenticazione, ovvero l'utilizzo di un login o di una password errati.

Dopo aver eliminato la mancata corrispondenza della password (in precedenza è stata utilizzata una password errata per poter controllare l'output di informazioni aggiuntive sull'errore), proveremo a inviare nuovamente l'e-mail.

Questa volta tutto sembrava andare bene e abbiamo ricevuto un messaggio che la mail era stata inviata con successo. Apparentemente, a parte l'errore temporaneo inserito deliberatamente nella password della posta del dominio, non abbiamo commesso altri errori.

Ma per essere sicuri che la lettera sia stata effettivamente consegnata al destinatario, inseriamo la mail con l'indirizzo [e-mail protetta] e guarda il risultato.

Come puoi vedere, la lettera dall'indirizzo [e-mail protetta], dal quale abbiamo inviato un messaggio di posta elettronica con il nome "Feedback" raggiunto con successo dall'amministratore del sito. Allo stesso tempo, il corpo della lettera contiene tutto il contenuto che abbiamo generato nello script utilizzando i dati ricevuti dal modulo di feedback, vale a dire:

  • Nome del mittente: Nikolay;
  • Indirizzo del mittente: [e-mail protetta];
  • Oggetto del messaggio: Controllo invio mail;
  • Contenuto del messaggio: messaggio di prova.

Ora, dopo aver verificato con successo l'invio della posta, è possibile disattivare la modalità di debug SMTP assegnando la proprietà SMTPDebug(pos.50) valore 0.

Pertanto, abbiamo completato il compito di creare uno strumento per l'invio di posta tramite SMTP con autorizzazione utilizzando un server di posta di terze parti.

Ad esempio, nel prossimo articolo vedremo come inviare email di conferma per recuperare i dati dell'account utente registrato.

File di origine del sito

I file sorgente del sito con gli aggiornamenti apportati in questo articolo possono essere scaricati dai materiali aggiuntivi allegati:

  • file della directory www
  • Tabelle del database MySQL

In PHP è abbastanza popolare utilizzare script che automatizzano il processo di invio delle lettere. In questo articolo vedremo un semplice script che invia lettere ai destinatari tramite SMTP( Protocollo di trasferimento della posta semplice ). Sarebbe troppo facile limitarci solo a questa funzionalità; lo script supporta anche gli allegati, ovvero puoi allegare un file pdf, txt o doc alla tua lettera.

Configurare lo script è abbastanza semplice; tutto ciò di cui hai bisogno è il login e la password del mittente per l'e-mail da cui verranno inviate le lettere.

Lo script funziona con la classe km_smtp_class.php, l'aspetto positivo della classe è che supporta vari protocolli SSL e TLS che forniscono un trasferimento sicuro dei dati.

Ecco lo script stesso:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-mail protetta]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-mail del destinatario $Receiver = " [e-mail protetta]"; // Oggetto del messaggio $Subject = "Invio di un'e-mail da PHP"; // Testo del messaggio (in HTML) $Text = "Ciao!
Messaggio inviato dallo script Mowshon Sito web: http://site"; // Allegato alla lettera: l'indirizzo del file $Attachment = ""; /* $mail = new KM_Mailer(server, porta, utente, password, tipo); */ /* Il tipo può essere: null, tls o ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]); if($mail->isLogin) ( // Allega un file if($Attachment) ($mail->addAttachment($Attachment);) // Aggiungi altri destinatari $mail->addRecipient( " [e-mail protetta]"); $mail->addRecipient(" [e-mail protetta]"); /* $mail->invia(Da, Per, Oggetto, Testo, Oggetto = opzionale) */ $SendMail = $mail->invia($SenderConfig["SMTP_email"], $Receiver, $Oggetto, $Testo ); // Cancella l'elenco dei destinatari $mail->clearRecipients(); $mail->clearBCC(); else ( echo "Si è verificato un errore durante la connessione al server SMTP"; ) ?>

L'impostazione dello script si basa principalmente sull'array $SenderConfig, qui dobbiamo specificare SMTP:server, porta, login e password email. Descriviamo ciascuna chiave dell'array:

SMTP_server - Indirizzo del server SMTP (indirizzo individuale per diverse e-mail)

Posta su Mail.ru: Porta smtp.mail.ru: 25, 587 e 465 (con crittografia SSL)

Posta Yandex: Porta smtp.yandex.ru: 25, 587 465 (porta SSL)

Posta vagante: Porta mail.rambler.ru: 25, 587 465 (porta SSL)

Yahoo Mail: porta SSL smtp.mail.yahoo.com: 465

(Se ti serve l'indirizzo dei server smtp che non sono nella lista scrivi nei commenti)

Porta_SMTP - L'abbiamo già descritto sopra per ciascun server SMTP.

SMTP_email - utente sarebbe più preciso, ma per chiarezza ho scritto email, indichiamo l'indirizzo email.

SMTP_pass: password per l'e-mail specificata come valore nella chiave SMTP_email


Tipo_SMTP: NULL predefinito. Il protocollo con cui verranno inviate le lettere. Protocolli: SSL e TLS

Puoi aggiungere allegati a una lettera semplicemente specificando l'indirizzo completo del file nella variabile $Attachment (/var/patch/to/file/File.pdf)

Se avete domande, scrivetele nei commenti qui sotto.

Posta PHP

Questa funzione è implementata per impostazione predefinita come invio di e-mail. Questa funzionalità non richiede che un server di terze parti inoltri la posta elettronica. Per verificare la correttezza di questa funzione è sufficiente creare un file test.php nella cartella con il sito e inserire lì il seguente codice:

Dove invece "E-MAILDESTINATARIO" Inserisci l'e-mail a cui inviare la lettera.

Inserisci questo file nella radice del tuo sito.

Successivamente, inserisci www.YourDomain/test.php nella barra degli indirizzi. Se viene ricevuta una lettera all'e-mail specificata, il tuo hosting funziona correttamente con la funzione di invio di lettere " Posta PHP". È possibile che la lettera sia finita nello spam, quindi è necessario controllarla anche lei.

Se la lettera è arrivata con una codifica incomprensibile, cambia la riga: "Controllo invio posta" SU "Controllo invio posta", "Tipo contenuto:testo/html;charset=utf-8".

E ripeti l'invio della lettera tramite la barra degli indirizzi del tuo browser.

Se dopo le manipolazioni di cui sopra la lettera di prova non raggiunge il destinatario finale, è necessario contattare il supporto tecnico del proprio hosting.

Tra gli svantaggi di questo metodo vale la pena notare che questo metodo non funziona in modo coerente. Potrebbero verificarsi interruzioni nell'invio di e-mail da parte dell'hosting.

Lo svantaggio principale di questo metodo è che tutte le lettere inviate alle e-mail dei clienti non verranno riconosciute dai servizi di posta (gmail, mail.ru, yandex.ru) poiché sono state inviate direttamente dal tuo sito web.

Il servizio di posta Gmail visualizza queste lettere con un punto interrogativo e la firma: "Il sistema Gmail non è stato in grado di confermare che questa lettera è stata inviata dal dominio TuoDominio. Potrebbe trattarsi di spam".

Per evitare questa situazione .

SMTP (protocollo di trasferimento di posta semplice)

SMTP: protocollo di trasferimento della posta. In totale, per impostare la trasmissione della posta utilizzando questo protocollo, è necessario il server SMTP stesso. L'opzione più comune per utilizzare la posta aziendale (di dominio) yandex.ru come server SMTP è https://pdd.yandex.ru/.

Prima di tutto è necessario account (posta) yandex, in base al quale verranno create le email per il tuo dominio: “ordine@TuoDominio” “info@TuoDominio”... L'account principale non sarà visibile da nessuna parte e verrà utilizzato solo per creare email di dominio basate su di esso in futuro.

Dopo l'autorizzazione nel tuo account Yandex personale, viene creata una posta di dominio al collegamento https://pdd.yandex.ru/. Questa è l'e-mail del dominio che gli utenti vedranno nel campo "Mittente".

Il campo "Mittente" è obbligatorio quando si inviano e-mail tramite SMTP. Usare SMTP per inviare lettere, una combinazione di " Dominio" - "E-mail", in tal modo le lettere vengono riconosciute dai servizi postali.


Tra gli svantaggi di questo metodo vale la pena notare l'impossibilità di "caricare" il ritratto della posta del dominio, poiché i servizi di posta stessi non forniscono ancora questa funzionalità.




Superiore