Ultima actualizare: 31.10.2015
SMTP (Simple Mail Transfer Protocol) este folosit pentru a trimite e-mailuri prin Internet. Acest protocol specifică modul în care serverele de e-mail interacționează în tranzit E-mail.
Pentru a lucra cu protocolul SMTP și a trimite e-mail în .NET, este destinată clasa SmtpClient din spațiul de nume System.Net.Mail.
Această clasă definește un număr de proprietăți care vă permit să personalizați trimiterea:
Gazdă: serverul smtp de la care se trimite e-mailurile. De exemplu, smtp.yandex.ru
Port: portul folosit de serverul smp. Dacă nu este specificat, portul 25 este utilizat în mod implicit.
Acreditări: date de autentificare a expeditorului
EnableSsl: specifică dacă se utilizează Protocolul SSL la trimitere
O altă clasă cheie care este utilizată la trimitere este MailMessage. Această clasă reprezintă mesajul trimis. Printre proprietățile sale se numără următoarele:
Atașamente: conține toate atașamentele de e-mail
Corp: direct textul scrisorii
De la: adresa expeditorului. Reprezintă un obiect MailAddress
Către: adresa destinatarului. Reprezintă, de asemenea, un obiect MailAddress
Subiect: definește subiectul e-mailului
IsBodyHtml: indică dacă e-mailul reprezintă conținut cu cod html
Să folosim aceste clase și să trimitem e-mailul:
Utilizarea sistemului; folosind System.Net; folosind System.IO; folosind System.Threading.Tasks; folosind System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args)) ( // expeditor - setați adresa și numele afișate în litera MailAddress de la = new MailAddress(" [email protected]", "Tom"); // căruia îi trimitem MailAddress = new MailAddress(" [email protected]"); // creează un obiect de mesaj MailMessage m = mailMessage nou (de la, către); // subiectul e-mailului m.Subject = "Test"; // textul e-mailului m.Body = "
Testarea scrisorii clientului smtp
"; // litera reprezintă cod html m.IsBodyHtml = adevărat; // adresa serverului smtp și portul din care vom trimite o scrisoare SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // autentificare și parolă smtp.Credentials = new NetworkCredential(" [email protected]", "parola mea"); smtp.EnableSsl = adevărat; smtp.Send(m); Console.Read(); ) ) )Pentru a trimite, este folosită metoda Send(), în care este transmis obiectul MailMessage.
De asemenea, putem folosi versiunea asincronă a trimiterii cu metoda SendMailAsync:
Utilizarea sistemului; folosind System.Net; folosind System.IO; folosind System.Threading.Tasks; folosind System.Net.Mail; namespace NetConsoleApp ( clasa Program ( static void Main(string args) ( SendEmailAsync().GetAwaiter(); Console.Read(); ) privat static asincron Sarcină SendEmailAsync() ( MailAddress de la = new MailAddress(" [email protected]", "Tom"); MailAddress la = new MailAddress(" [email protected]"); MailMessage m = new MailMessage(de la, la); m.Subject = "Test"; m.Body = "Smtp client work test letter 2"; SmtpClient smtp = new SmtpClient("smtp.gmail.com" , 587 ); smtp.Credentials = new NetworkCredential(" [email protected]„, „parola mea”); smtp.EnableSsl = adevărat; așteaptă smtp.SendMailAsync(m); Console.WriteLine(„E-mail trimis”); ) ) )
Adăugați atașamente
Putem atașa atașamente la e-mailuri folosind proprietatea Attachments. Fiecare atașament reprezintă un obiect System.Net.Mail.Attachment:
MailAddress de la = new MailAddress(" [email protected]", "Tom"); MailAddress la = new MailAddress(" [email protected]"); MailMessage m = new MailMessage(de la, la); m.Attachments.Add(new Attachment("D://temlog.txt"));
Comandantul navei 14 octombrie 2013 la 19:29Trimiteți e-mail prin programare folosind diverse servicii
- .net,
Foarte des ai de-a face cu trimiterea e-mailuri din codul programului. Nu trebuie să cauți departe pentru exemple.
Acest articol este un indiciu și nu dezvăluie nimic nou, dar înainte de a-l scrie, am arătat asemănător pe Internet și am fost destul de surprins că aproape peste tot oferă fie o soluție nefuncțională, fie învechită, fie pur și simplu scrisă analfabet.
Primul lucru pe care nu ar trebui să-l faceți cu aceste exemple este să utilizați System.Web.Mail, care a fost depreciat de mult timp și de când Studio vizual 2010 biblioteca System.Web nici măcar nu poate fi adăugată fără a ști calea plină la DLL-ul corespunzător.
În schimb, se propune utilizarea bibliotecii System.Net.
folosind System.Net; folosind System.Net.Mail;
Deci, cel mai simplu, este și cel mai important și des folosit este trimiterea unei scrisori de la dvs server de mail Pe care este configurat clientul SMTP. După cum înțelegeți, serverul poate fi fie cel pe care rulează aplicația, fie unul la distanță, pe care aveți dreptul de a trimite scrisori fără autorizație suplimentară.
Exemplu de cod pentru trimiterea de e-mailuri de la aparatul local:
Utilizarea serviciilor de e-mail precum Gmail, Yandex, Mail.ru etc. totul este la fel, se adauga doar parametrii cu autorizatie.
Server SMTP: smtp.gmail.com
Port: 587
folosind (MailMessage mm = new MailMessage ("Nume
Server SMTP: smtp.yandex.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume
Server SMTP: smtp.mail.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume
Daca ai cutie poștală pe serviciul mail.ru se termină cu inbox.ru, list.ru sau bk.ru, apoi adresa serverului SMTP (smtp.inbox.ru, smtp.list.ru și smtp.bk.ru) se modifică în consecință.
După cum puteți vedea, pentru a utiliza orice alt serviciu de e-mail în programele dvs., trebuie doar să aflați adresa și portul serverului SMTP, precum și regulile de autorizare.
De asemenea, trebuie amintit că aproape toate serviciile de e-mail ale terților impun limite asupra numărului de e-mailuri trimise într-o perioadă de timp.
Etichete: e-mail, trimitere e-mailuri, smtp
Una dintre cele mai solicitate funcții de pe site este cererea sau formularul de comandă, datele din care sunt trimise pe mail-ul proprietarului site-ului. De regulă, astfel de formulare sunt simple și constau din două sau trei câmpuri pentru introducerea datelor. Cum se creează un astfel de formular de comandă? Acest lucru va necesita utilizarea limbajului de marcare HTML și a limbajului Programare PHP.
Limbajul de marcare HTML în sine este simplu, trebuie doar să vă dați seama cum și unde să puneți anumite etichete. Cu limbajul de programare PHP, lucrurile sunt ceva mai complicate.
Nu este dificil pentru un programator să creeze un astfel de formular, dar unele acțiuni pot părea dificile pentru un codificator HTML.
Crearea unui formular de trimitere html
Prima linie va fi următoarea
Acum hai să punem totul împreună.
Acum să facem obligatoriu câmpurile din formular. Avem următorul cod:
Creați un fișier care acceptă date dintr-un formular HTML
Acesta va fi un fișier numit send.php
În fișier, în prima etapă, trebuie să primiți date din matricea post. Pentru a face acest lucru, creăm două variabile:
$fio = $_POST["fio"];
$email = $_POST["e-mail"];
Numele de variabile în php sunt precedate de un semn $, iar un punct și virgulă este plasat la sfârșitul fiecărei linii. $_POST este o matrice la care sunt transmise datele din formular. În formularul html este specificată metoda de trimitere = "post". Astfel, două variabile sunt preluate din formulare html. Pentru a vă proteja site-ul, trebuie să treceți aceste variabile prin mai multe filtre - funcții php.
Prima funcție va converti toate caracterele pe care utilizatorul va încerca să le adauge în formular:
În acest caz, nu sunt create variabile noi în php, ci sunt folosite cele existente. Ceea ce va face filtrul este să convertească caracterul "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
A doua funcție decodifică adresa URL dacă utilizatorul încearcă să o adauge în formular.
$fio = urldecode($fio);
$email = urldecode($email);
Cu a treia funcție, vom elimina spații de la începutul și sfârșitul șirului, dacă există:
$fio = trim($fio);
$email = trim($email);
Există și alte funcții care vă permit să filtrați variabilele php. Utilizarea lor depinde de cât de mult vă este teamă că un atacator va încerca să adauge cod de program la această formă de trimitere a datelor către mail html.
Validați datele transmise din formularul HTML în fișierul PHP
Pentru a verifica dacă acest cod funcționează, dacă datele sunt transferate, îl puteți afișa pur și simplu pe ecran folosind funcția ecou:
echo $fio;
ecou"
";
echo $email;
A doua linie de aici este necesară pentru a separa rezultatul variabilelor php în linii diferite.
Trimiterea datelor primite din formularul HTML la e-mail folosind PHP
Pentru a trimite date la e-mail, trebuie să utilizați funcția de e-mail în PHP.
mail("la ce adresa se trimite", "subiectul scrisorii", "Mesaj (corpul scrisorii)","De la: din care email este trimisa scrisoarea \r\n");
De exemplu, trebuie să trimiteți date către e-mailul proprietarului sau managerului site-ului [email protected]
Subiectul e-mailului trebuie să fie clar, iar mesajul e-mailului trebuie să conțină ceea ce utilizatorul a specificat în formularul HTML.
Poștă(" [email protected]", "Aplicație de pe site", "Nume:".$fio.". E-mail: ".$email ,"De la: [email protected]\r\n");
Trebuie să adăugați o condiție care va verifica dacă formularul a fost trimis folosind PHP la adresa de e-mail specificată.
dacă (mail(" [email protected]", "Comanda de pe site", "Nume:".$fio.". E-mail: ".$email ,"De la: [email protected]\r\n"))
{
echo „mesaj trimis cu succes”;
) altfel (
}
Astfel, codul de program al fișierului send.php, care va trimite datele formularului HTML către e-mail, va arăta astfel:
$fio = $_POST["fio"];
$email = $_POST["e-mail"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
// ecou "
";
//echo $email;
dacă (mail(" [email protected]", "Aplicație de pe site", "Nume:".$fio.". E-mail: ".$email ,"De la: [email protected]\r\n"))
( echo „mesaj trimis cu succes”;
) altfel (
echo „au apărut erori la trimiterea mesajului”;
}?>
Cele trei rânduri pentru a verifica dacă datele sunt transmise fișierului sunt comentate. Dacă este necesar, acestea pot fi eliminate, deoarece au fost necesare doar pentru depanare.
Puneți codul HTML și PHP pentru trimiterea formularelor într-un singur fișier
În comentariile acestui articol, mulți oameni întreabă cum să faci atât formularul HTML, cât și codul PHP pentru trimiterea datelor la e-mail să fie într-un singur fișier, nu în două.
Pentru a implementa această lucrare, trebuie să plasați codul HTML al formularului în fișierul send.php și să adăugați o condiție care va verifica prezența variabilelor în matricea POST (această matrice este transmisă din formular). Adică, dacă variabilele din matrice nu există, atunci trebuie să arătați utilizatorului un formular. În caz contrar, trebuie să luați datele din matrice și să le trimiteți destinatarului.
Să vedem cum se schimbă codul PHP în fișierul send.php:
//verificați dacă variabilele există în matricea POST
if(!isset($_POST["fio"]) și !isset($_POST["email"]))(
?> ) altfel (
//arata formularul
$fio = $_POST["fio"];
$email = $_POST["e-mail"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
dacă (mail(" [email protected]", "Aplicație de pe site", "Nume:".$fio.". E-mail: ".$email ,"De la: [email protected]\r\n"))(
echo „Mesajul trimis cu succes”;
) altfel (
echo „Au apărut erori la trimiterea mesajului”;
}
}
?>
Verificăm existența unei variabile în matricea POST cu funcția PHP isset(). Un semn de exclamare înaintea acestei funcție într-o condiție înseamnă negație. Adică, dacă variabila nu există, atunci trebuie să ne arătăm forma. Dacă nu aș pune un semn de exclamare, atunci condiția ar însemna literal - „dacă există, atunci arată forma”. Și acest lucru este greșit în cazul nostru. Desigur, îl puteți redenumi în index.php. Dacă redenumiți fișierul, atunci nu uitați să redenumiți numele fișierului și în linie