Se trimite e-mail. Trimiterea programatică a unui e-mail utilizând diverse servicii Trimiterea unui e-mail cu un atașament c#

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:29

Trimiteț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:
", "[email protected]"))( mm.Subject = "Subiectul e-mailului"; mm.Body = "Corpul e-mailului"; mm.IsBodyHtml = fals; folosind (SmtpClient sc = new SmtpClient ("127.0. server de e-mail și port dacă este necesar sc.Send(mm) ); ))

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 ", "[email protected]"))( mm.Subject = „Subiectul e-mailului”; mm.Body = „Corpul e-mailului”; mm.IsBodyHtml = fals; utilizând (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "GmailPassword"); sc.Send(mm); ) )

Server SMTP: smtp.yandex.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume ", "[email protected]"))( mm.Subject = „Subiectul e-mailului”; mm.Body = „Corpul e-mailului”; mm.IsBodyHtml = fals; folosind (SmtpClient sc = SmtpClient nou(„smtp.yandex.ru”, 25))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "YandexPassword"); sc.Send(mm); ) )

Server SMTP: smtp.mail.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume ", "[email protected]"))( mm.Subject = "Subiectul e-mailului"; mm.Body = "Corpul e-mailului"; mm.IsBodyHtml = fals; folosind (SmtpClient sc = SmtpClient nou("smtp.mail.ru", 25))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "MailRuPassword"); sc.Send(mm); ) )
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

Acesta este un element de formă foarte important. În acesta, indicăm cum vor fi transferate datele și în ce fișier. În acest caz, totul este trimis prin metoda POST în fișierul send.php. Programul din acest fișier, respectiv, trebuie să accepte datele, acestea vor fi conținute în tabloul de post și să le trimită la adresa de e-mail specificată.

Să revenim la formular. Al doilea rând va conține un câmp pentru introducerea unui nume complet. Are urmatorul cod:

Tipul formularului este text, adică utilizatorul va putea introduce sau copia text aici de la tastatură. Parametrul nume conține numele formularului. În acest caz, este fio, sub acest nume va fi transmis tot ceea ce utilizatorul introduce în acest câmp. Parametrul substituent specifică ce va fi scris în acest câmp ca explicație.

Rândul următor:

Aici, aproape totul este la fel, dar numele câmpului este specificat ca e-mail, iar explicația este specificată pentru ca utilizatorul să-și introducă adresa de e-mail în acest formular.

Următorul rând va fi butonul de trimitere:

Iar ultima linie din formular va fi eticheta

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:



Formular de cerere pe site


//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

. Formularul trebuie să trimită către aceeași pagină, cum ar fi index.php. Am adăugat titlul paginii la cod.

Erori frecvente care apar la trimiterea unui formular PHP de pe un site web

Prima, probabil cea mai populară greșeală, este atunci când vedeți o pagină albă goală fără mesaje. Aceasta înseamnă că ați făcut o greșeală în codul paginii. Trebuie să activați afișarea tuturor erorilor în PHP și apoi veți vedea unde a fost făcută eroarea. Adăugați la cod:

ini_set("display_errors","On");
error_reporting ("E_ALL");

Fișierul send.php trebuie rulat doar pe server, altfel codul pur și simplu nu va funcționa. Este de dorit ca acesta să nu fie un server local, deoarece nu este întotdeauna configurat pentru a trimite date către un server de e-mail extern. Dacă rulați codul pe un alt server decât serverul, atunci veți vedea codul PHP chiar pe pagină.

Astfel, pentru o funcționare corectă, recomand plasarea fișierului send.php pe găzduirea site-ului. Acolo, de regulă, totul este deja configurat.

O altă greșeală comună este atunci când apare notificarea „Mesaj trimis cu succes”, dar scrisoarea nu ajunge prin poștă. În acest caz, trebuie să verificați cu atenție linia:

dacă (mail(" [email protected]", "Comanda de pe site", "Nume:".$fio.". E-mail: ".$email ,"De la: [email protected]\r\n"))

În loc de [email protected] ar trebui să fie o adresă de e-mail la care doriți să trimiteți o scrisoare, dar în loc de[email protected] trebuie să fie un e-mail existent pentru acest site. De exemplu, pentru un site de site, acesta ar fi . Doar in acest caz se va trimite scrisoarea cu datele din formular.

Comandantul navei 14 octombrie 2013 la 19:29

Trimiteți e-mail prin programare folosind diverse servicii

De foarte multe ori trebuie să vă ocupați de trimiterea de 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 demult învechit, iar începând cu Visual Studio 2010, nici măcar nu puteți adăuga biblioteca System.Web fără a cunoaște calea completă către DLL corespunzătoare.
Î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 pe serverul tău de e-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:
", "[email protected]"))( mm.Subject = "Subiectul e-mailului"; mm.Body = "Corpul e-mailului"; mm.IsBodyHtml = fals; folosind (SmtpClient sc = new SmtpClient ("127.0. server de e-mail și port dacă este necesar sc.Send(mm) ); ))

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 ", "[email protected]"))( mm.Subject = „Subiectul e-mailului”; mm.Body = „Corpul e-mailului”; mm.IsBodyHtml = fals; utilizând (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "GmailPassword"); sc.Send(mm); ) )

Server SMTP: smtp.yandex.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume ", "[email protected]"))( mm.Subject = „Subiectul e-mailului”; mm.Body = „Corpul e-mailului”; mm.IsBodyHtml = fals; folosind (SmtpClient sc = SmtpClient nou(„smtp.yandex.ru”, 25))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "YandexPassword"); sc.Send(mm); ) )

Server SMTP: smtp.mail.ru
Port: 25
folosind (MailMessage mm = new MailMessage ("Nume ", "[email protected]"))( mm.Subject = "Subiectul e-mailului"; mm.Body = "Corpul e-mailului"; mm.IsBodyHtml = fals; folosind (SmtpClient sc = SmtpClient nou("smtp.mail.ru", 25))( sc. EnableSsl = adevărat; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = fals; sc.Credentials = nou NetworkCredential(" [email protected]", "MailRuPassword"); sc.Send(mm); ) )
Dacă cutia dvs. poștală de pe serviciul mail.ru se termină cu inbox.ru, list.ru sau bk.ru, atunci adresa serverului SMTP se schimbă în consecință (smtp.inbox.ru, smtp.list.ru și smtp.bk.ru ).

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

Buna ziua. Deoarece grafomania mea progresează, am decis să mai adaug un articol. Articolul va, ca întotdeauna, cu exemple în C #, dar un VB „schnik mai mult sau mai puțin priceput va rescrie cu ușurință tot codul sub VB.NET.

Să începem, poate

Pentru a trimite e-mail, trebuie să folosim trei obiecte. System.Net.Mail.SmtpClient pentru a trimite un mesaj, System.Net.Mail.MailMessage pentru a reprezenta un mesaj și System.Net.NetworkCredential pentru a autoriza.

Să creăm un client:

Var client = new SmtpClient("$Mail-Server-Address$", $Mail-Server-Port$);

referinta constructorului:

SmtpClient(string gazdă, int port);

Să creăm o instanță a clasei MailMessage:

Var msg = new MailMessage ("de la", "la");

Acum să setăm subiectul și conținutul scrisorii (apropo, totul poate fi setat în constructor). Precum și autentificarea și parola pentru clientul smtp. Apoi vom trimite un e-mail folosind metoda Send a obiectului nostru client:

Var client = new SmtpClient("smtp.yandex.ru"); var msg = new MailMessage ("de la", "la"); msg.Subject = "Mesajul meu de testare"; msg.Body = "Bună, prietene! Închipuiți-vă că tocmai am scris un program incredibil pentru a vă trimite această scrisoare fără sens de un miliard de ori doar prin câteva clicuri!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // priority msg.Priority = MailPriority.High; // corpul mesajului în html? msg.IsBodyHtml = fals; client.Credentials = new NetworkCredential("login", "parola"); client.Send(msg);

Asta e tot. Asigurați-vă că introduceți corect toate informațiile necesare.


Comentarii()

ruslang02 30

CoolHacker, pot împrumuta acest cod de la tine pentru partea 3 a browserului web?

Coolhacker 770 ruslang02 30

Mulțumesc, îl voi folosi pentru a trimite link-uri prin e-mail
ca in Firefox

LetSevI 10

Se încarcă...
Top