Slanje e-pošte. Najjednostavniji oblik slanja podataka na poštu koristeći HTML i PHP Slanje e-pošte s prilogom c#

Zdravo. Pošto moja grafomanija napreduje, odlučio sam da dodam još jedan članak. Članak će, kao i uvek, sa primerima u C#, ali će manje-više vešt VB "schnik lako prepisati sav kod pod VB.NET.

Počnimo, možda

Za slanje e-pošte trebamo koristiti tri objekta. System.Net.Mail.SmtpClient za slanje poruke, System.Net.Mail.MailMessage za predstavljanje poruke i System.Net.NetworkCredential za autorizaciju.

Kreirajmo klijenta:

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

referenca konstruktora:

SmtpClient(string host, int port);

Kreirajmo instancu klase MailMessage:

Var msg = nova MailMessage("od", "do");

Sada postavimo temu i sadržaj pisma (usput, sve se može podesiti u konstruktoru). Kao i login i lozinka za smtp klijenta. Zatim ćemo poslati e-mail koristeći Send metodu našeg klijentskog objekta:

Var client = novi SmtpClient("smtp.yandex.ru"); var msg = nova MailMessage("od", "do"); msg.Subject = "Moja test poruka"; msg.Body = "Zdravo, prijatelju! Zamislite da sam upravo napisao nevjerovatan program da vam pošalje ovo besmisleno pismo milijardu puta samo u nekoliko klikova!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // prioritet msg.Priority = MailPriority.High; // tijelo poruke u html? msg.IsBodyHtml = false; client.Credentials = new NetworkCredential("login", "password"); client.Send(msg);

To je sve. Obavezno unesite sve tražene podatke ispravno.


Komentari()

ruslang02 30

CoolHacker, mogu li od tebe da posudim ovaj kod za treći dio web pretraživača?

Coolhacker 770 ruslang02 30

Hvala, koristiću ga za slanje linkova e-mailom
kao u Firefoxu

LetSevI 10 mr olympia 14. oktobar 2013. u 19:29

Programski šaljite e-poštu koristeći različite usluge

  • .net,

Vrlo često morate imati posla sa slanjem emails od programski kod. Ne morate daleko tražiti primjere.

Ovaj članak je nagovještaj i ne otkriva ništa novo, ali prije nego što sam ga napisao, izgledao sam slično na internetu i bio sam prilično iznenađen što skoro svugdje nude ili nefunkcionalno ili zastarjelo rješenje, ili jednostavno nepismeno napisano.

Prva stvar koju ne biste trebali raditi s ovim primjerima je da koristite System.Web.Mail, koji je već duže vrijeme zastario, a od vizuelni studio 2010. System.Web biblioteka ne može se čak ni dodati bez znanja puni put na odgovarajući DLL.
Umjesto toga, predlaže se korištenje System.Net biblioteke.
koristeći System.Net; koristeći System.Net.Mail;
Dakle, najjednostavnije, ujedno i najvažnije i često korišteno je slanje vašeg pisma mail server Na kojem je konfiguriran SMTP klijent. Kao što razumijete, server može biti ili onaj na kojem se aplikacija pokreće, ili udaljeni, na kojem imate prava slanja pisama bez dodatnog ovlaštenja.

Primjer koda za slanje e-pošte s lokalnog stroja:
", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; koristeći (SmtpClient sc = new SmtpClient("127.0. server pošte i port ako je potrebno sc.Send(mm ); ) )

Korištenje mail servisa kao što su Gmail, Yandex, Mail.ru, itd. sve je isto, samo se dodaju parametri sa autorizacijom.

SMTP server: smtp.gmail.com
Luka: 587
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = lažno; korištenje (SmtpClient sc = novi SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "GmailPassword"); sc.Send(mm); ) )

SMTP server: smtp.yandex.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; korištenje (SmtpClient sc = novi SmtpClient("smtp.yandex.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "YandexPassword"); sc.Send(mm); ) )

SMTP server: smtp.mail.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; korištenje (SmtpClient sc = novi SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "MailRuPassword"); sc.Send(mm); ) )
Ako imate Mailbox na usluzi mail.ru završava se inbox.ru, list.ru ili bk.ru, a zatim se adresa SMTP servera (smtp.inbox.ru, smtp.list.ru i smtp.bk.ru) mijenja u skladu s tim.

Kao što vidite, da biste koristili bilo koju drugu uslugu pošte u svojim programima, potrebno je samo da saznate adresu i port SMTP servera, kao i pravila autorizacije.

Također treba imati na umu da gotovo sve usluge e-pošte trećih strana nameću ograničenja na broj e-poruka poslanih u određenom vremenskom periodu.

Oznake: email, slanje e-pošte, smtp

Jedna od najtraženijih funkcija na sajtu je formular za prijavu ili narudžbu, sa koje se podaci šalju na mail vlasnika sajta. Takvi obrasci su po pravilu jednostavni i sastoje se od dva ili tri polja za unos podataka. Kako napraviti takav obrazac za narudžbu? Ovo će zahtijevati korištenje HTML jezika za označavanje i jezika PHP programiranje.

Sam jezik za označavanje HTML-a je jednostavan, samo trebate shvatiti kako i gdje staviti određene oznake. Sa programskim jezikom PHP, stvari su malo komplikovanije.

Programeru nije teško napraviti takav obrazac, ali neke radnje mogu izgledati teške za HTML kodera.

Kreiranje html obrasca za slanje

Prvi red će biti sljedeći

Ovo je veoma važan element forme. U njemu navodimo kako će se podaci prenijeti i u koju datoteku. U ovom slučaju, sve se šalje metodom POST u datoteku send.php. Program u ovoj datoteci, odnosno, mora prihvatiti podatke, oni će biti sadržani u post nizu i poslati ih na navedenu adresu e-pošte.

Vratimo se na formu. Drugi red će sadržavati polje za unos punog imena. Ima sljedeći kod:

Tip obrasca je tekst, odnosno korisnik će moći da unese ili kopira tekst ovde sa tastature. Parametar name sadrži ime obrasca. U ovom slučaju, to je fio, pod tim imenom će se prenijeti sve što korisnik unese u ovo polje. Parametar čuvara mjesta specificira šta će biti napisano u ovom polju kao objašnjenje.

Sljedeća linija:

Ovdje je skoro sve isto, ali je ime za polje navedeno kao email, a objašnjenje da korisnik unese svoju email adresu u ovaj obrazac.

Sljedeći red će biti dugme za slanje:

I posljednji red u obrascu će biti oznaka

Sad hajde da sve to spojimo.





Sada neka polja u obrascu budu obavezna. Imamo sljedeći kod:





Kreirajte datoteku koja prihvata podatke iz HTML obrasca

Ovo će biti datoteka pod nazivom send.php

U datoteci, u prvoj fazi, morate primiti podatke iz polja posta. Da bismo to učinili, kreiramo dvije varijable:

$fio = $_POST["fio"];
$email = $_POST["e-pošta"];

Imenima varijabli u php prethodi znak $, a na kraju svakog reda stavlja se tačka i zarez. $_POST je niz kojem se prosljeđuju podaci iz obrasca. U html formi je specificiran metod slanja="post". Dakle, dvije varijable su uzete iz html forme. U svrhu zaštite vaše stranice, ove varijable morate proći kroz nekoliko filtera - php funkcija.

Prva funkcija će pretvoriti sve znakove koje će korisnik pokušati dodati u obrazac:

U ovom slučaju, nove varijable u php-u se ne kreiraju, već se koriste postojeće. Filter će pretvoriti karakter "<" в "<". Также он поступить с другими символами, встречающимися в html коде.

Druga funkcija dekodira url ako ga korisnik pokuša dodati u obrazac.

$fio = urldecode($fio);
$email = urldecode($email);

Sa trećom funkcijom ćemo ukloniti razmake s početka i kraja niza, ako ih ima:

$fio = trim($fio);
$email = trim($email);

Postoje i druge funkcije koje vam omogućavaju da filtrirate php varijable. Njihova upotreba zavisi od toga koliko se plašite da će napadač pokušati da doda programski kod ovom obliku slanja podataka u html poštu.

Potvrdite podatke proslijeđene iz HTML obrasca u PHP datoteku

Da biste provjerili funkcionira li ovaj kod, ako se podaci prenose, jednostavno ga možete prikazati na ekranu pomoću funkcije echo:

echo $fio;
eho"
";
echo $email;

Drugi red ovde je potreban da bi se odvojio izlaz php varijabli u različite redove.

Slanje primljenih podataka iz HTML obrasca na mail koristeći PHP

Da biste poslali podatke na poštu, morate koristiti funkciju pošte u PHP-u.

mail("na koju adresu poslati", "predmet pisma", "Poruka (tijelo pisma)","Od: s koje e-pošte je pismo poslano \r\n");

Na primjer, trebate poslati podatke na e-mail vlasnika ili menadžera stranice [email protected]

Predmet e-pošte treba da bude jasan, a poruka e-pošte treba da sadrži ono što je korisnik naveo u HTML obrascu.

mail(" [email protected]", "Aplikacija sa sajta", "Naziv:".$fio.". Email: ".$email ,"Od: [email protected]\r\n");

Morate dodati uslov koji će provjeriti da li je obrazac poslat pomoću PHP-a na navedenu adresu e-pošte.

if (mail(" [email protected]", "Narudžba sa stranice", "Naziv:".$fio.". Email: ".$email ,"Od: [email protected]\r\n"))
{
echo "poruka je uspješno poslana";
) drugo (
}

Tako će programski kod datoteke send.php, koji će poslati podatke HTML obrasca na mail, izgledati ovako:

$fio = $_POST["fio"];
$email = $_POST["e-pošta"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
// echo "
";
//echo $email;
if (mail(" [email protected]", "Aplikacija sa sajta", "Naziv:".$fio.". Email: ".$email ,"Od: [email protected]\r\n"))
( echo "poruka je uspješno poslana";
) drugo (
echo "došlo je do greške prilikom slanja poruke";
}?>

Tri reda za provjeru da li se podaci prosljeđuju u datoteku su komentirane. Ako je potrebno, mogu se ukloniti, jer su bili potrebni samo za otklanjanje grešaka.

Stavite HTML i PHP kod za podnošenje obrasca u jednu datoteku

U komentarima na ovaj članak, mnogi ljudi pitaju kako da i HTML obrazac i PHP kod za slanje podataka na poštu budu u jednoj datoteci, a ne u dvije.

Da biste implementirali ovaj posao, potrebno je da postavite HTML kod obrasca u datoteku send.php i dodate uslov koji će provjeriti prisustvo varijabli u POST nizu (ovaj niz se prenosi iz obrasca). To jest, ako varijable u nizu ne postoje, onda morate pokazati korisniku obrazac. U suprotnom, trebate uzeti podatke iz niza i poslati ih primaocu.

Pogledajmo kako promijeniti PHP kod u send.php datoteci:



Formular za prijavu na web stranicu


//provjerava da li varijable postoje u POST nizu
if(!isset($_POST["fio"]) i !isset($_POST["email"]))(
?>





) drugo (
//prikaži formu
$fio = $_POST["fio"];
$email = $_POST["e-pošta"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
if (mail(" [email protected]", "Aplikacija sa sajta", "Naziv:".$fio.". Email: ".$email ,"Od: [email protected]\r\n"))(
echo "Poruka je uspješno poslana";
) drugo (
echo "Došlo je do greške prilikom slanja poruke";
}
}
?>



Provjeravamo postojanje varijable u POST nizu s PHP isset() funkcijom. Uskličnik ispred ove funkcije u uvjetu znači negaciju. Odnosno, ako varijabla ne postoji, onda moramo pokazati našu formu. Da nisam stavio uzvičnik, onda bi uslov doslovno značio - "ako postoji, onda pokaži formu". A ovo je pogrešno u našem slučaju. Naravno, možete ga preimenovati u index.php. Ako preimenujete datoteku, onda ne zaboravite preimenovati naziv datoteke i u retku

. Obrazac mora biti povezan na istu stranicu, kao što je index.php. Dodao sam naslov stranice u kod.

Uobičajene greške koje se javljaju prilikom slanja PHP obrasca sa web stranice

Prva, vjerovatno najpopularnija greška je kada vidite praznu bijelu stranicu bez poruka. To znači da ste napravili grešku u kodu stranice. Potrebno je da uključite prikaz svih grešaka u PHP-u i tada ćete videti gde je greška napravljena. Dodaj kodu:

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

Datoteka send.php mora biti pokrenuta samo na serveru, inače kod jednostavno neće raditi. Poželjno je da ovo nije lokalni server, jer nije uvijek konfiguriran za slanje podataka na vanjski mail server. Ako pokrenete kod na serveru koji nije server, tada ćete vidjeti PHP kod pravo na stranici.

Stoga, za korektan rad, preporučujem postavljanje datoteke send.php na hosting stranice. Tamo je, po pravilu, sve već konfigurisano.

Druga česta greška je kada se pojavi obavijest "Poruka je uspješno poslana", ali pismo ne stiže poštom. U tom slučaju morate pažljivo provjeriti liniju:

if (mail(" [email protected]", "Narudžba sa stranice", "Naziv:".$fio.". Email: ".$email ,"Od: [email protected]\r\n"))

Umjesto [email protected] treba da bude adresa e-pošte na koju želite da pošaljete pismo, ali umesto[email protected] mora biti postojeći email za ovu stranicu. Na primjer, za web lokaciju, ovo bi bilo . Samo u tom slučaju biće poslato pismo sa podacima iz obrasca.

Posljednje ažuriranje: 31.10.2015

SMTP (Simple Mail Transfer Protocol) se koristi za slanje pošte preko Interneta. Ovaj protokol specificira kako mail serveri komuniciraju prilikom slanja e-pošte.

Za rad sa SMTP protokolom i slanje e-pošte u .NET-u, namijenjena je klasa SmtpClient iz imenskog prostora System.Net.Mail.

Ova klasa definira brojna svojstva koja vam omogućavaju da prilagodite slanje:

    Host: smtp server sa kojeg se šalje pošta. Na primjer, smtp.yandex.ru

    Port: Port koji koristi smp server. Ako nije navedeno, port 25 se koristi po defaultu.

    Akreditivi: podaci za autentifikaciju pošiljaoca

    EnableSsl: Određuje da li će se SSL protokol koristiti prilikom slanja

Druga ključna klasa koja se koristi prilikom slanja je MailMessage. Ova klasa predstavlja poruku koja se šalje. Među njegovim svojstvima su sljedeća:

    Prilozi: sadrži sve priloge e-pošte

    Telo: direktno tekst pisma

    Od: adresa pošiljaoca. Predstavlja objekt MailAddress

    Za: adresa primaoca. Također predstavlja objekt MailAddress

    Predmet: definiše temu e-pošte

    IsBodyHtml: Označava da li e-pošta predstavlja sadržaj s html kodom

Koristimo ove klase i pošaljimo e-mail:

Korišćenje sistema; koristeći System.Net; koristeći System.IO; koristeći System.Threading.Tasks; koristeći System.Net.Mail; imenski prostor NetConsoleApp ( klasa Program ( static void Main(string args) ( // pošiljalac - postavite adresu i ime prikazano u slovu MailAddress from = new MailAddress(" [email protected]", "Tom"); // kome šaljemo MailAddress = new MailAddress(" [email protected]"); // kreirajte objekt poruke MailMessage m = new MailMessage(od, do); // predmet pošte m.Subject = "Test"; // tekst e-pošte m.Body = "

Letter-test smtp-klijenta

"; // slovo predstavlja html kod m.IsBodyHtml = true; // adresu i port smtp servera sa kojeg ćemo poslati slovo SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // login i lozinka smtp.Credentials = new NetworkCredential(" [email protected]", "moja lozinka"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )

Za slanje se koristi metoda Send() u kojoj se prosljeđuje objekt MailMessage.

Možemo koristiti i asinkronu verziju slanja s metodom SendMailAsync:

Korišćenje sistema; koristeći System.Net; koristeći System.IO; koristeći System.Threading.Tasks; koristeći System.Net.Mail; imenski prostor NetConsoleApp ( klasa Program ( statički void Main(string args) ( SendEmailAsync().GetAwaiter(); Console.Read(); ) privatni statički async zadatak SendEmailAsync() (Adresa pošte od = nova adresa pošte(" [email protected]", "Tom"); MailAddress to = new MailAddress(" [email protected]"); MailMessage m = nova MailMessage(od, do); m.Subject = "Test"; m.Body = "Smtp klijentski radni test pismo 2"; SmtpClient smtp = novi SmtpClient("smtp.gmail.com" , 587 ); smtp.Credentials = new NetworkCredential(" [email protected]", "moja lozinka"); smtp.EnableSsl = true; čekaj smtp.SendMailAsync(m); Console.WriteLine("Pošta poslana"); ) ) )

Dodajte priloge

Možemo priložiti priloge e-porukama koristeći svojstvo Attachments. Svaki prilog predstavlja System.Net.Mail.Attachment objekt:

MailAddress from = new MailAddress(" [email protected]", "Tom"); MailAddress to = new MailAddress(" [email protected]"); MailMessage m = nova MailMessage(od, do); m.Attachments.Add(novi prilog("D://temlog.txt"));

Vrlo često morate imati posla sa slanjem e-pošte iz programskog koda. Ne morate daleko tražiti primjere.

Ovaj članak je nagovještaj i ne otkriva ništa novo, ali prije nego što sam ga napisao, izgledao sam slično na internetu i bio sam prilično iznenađen što skoro svugdje nude ili nefunkcionalno ili zastarjelo rješenje, ili jednostavno nepismeno napisano.

Prva stvar koju ne bi trebalo da radite sa ovim primerima je da koristite System.Web.Mail, koji je odavno zastareo, a počevši od Visual Studio 2010, ne možete čak ni dodati biblioteku System.Web a da ne znate punu putanju do odgovarajući DLL.
Umjesto toga, predlaže se korištenje System.Net biblioteke.
koristeći System.Net; koristeći System.Net.Mail;
Dakle, najjednostavnije, ujedno i najvažnije i često korišćeno, je slanje pisma sa vašeg mail servera, na kojem je konfigurisan SMTP klijent. Kao što razumijete, server može biti ili onaj na kojem se aplikacija pokreće, ili udaljeni, na kojem imate prava slanja pisama bez dodatnog ovlaštenja.

Primjer koda za slanje e-pošte s lokalnog stroja:
", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; koristeći (SmtpClient sc = new SmtpClient("127.0. server pošte i port ako je potrebno sc.Send(mm ); ) )

Korištenje mail servisa kao što su Gmail, Yandex, Mail.ru, itd. sve je isto, samo se dodaju parametri sa autorizacijom.

SMTP server: smtp.gmail.com
Luka: 587
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = lažno; korištenje (SmtpClient sc = novi SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "GmailPassword"); sc.Send(mm); ) )

SMTP server: smtp.yandex.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; korištenje (SmtpClient sc = novi SmtpClient("smtp.yandex.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "YandexPassword"); sc.Send(mm); ) )

SMTP server: smtp.mail.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[email protected]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; korištenje (SmtpClient sc = novi SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [email protected]", "MailRuPassword"); sc.Send(mm); ) )
Ako se vaš poštanski sandučić na usluzi mail.ru završava sa inbox.ru, list.ru ili bk.ru, tada se adresa SMTP servera mijenja u skladu s tim (smtp.inbox.ru, smtp.list.ru i smtp.bk.ru).

Kao što vidite, da biste koristili bilo koju drugu uslugu pošte u svojim programima, potrebno je samo da saznate adresu i port SMTP servera, kao i pravila autorizacije.

Također treba imati na umu da gotovo sve usluge e-pošte trećih strana nameću ograničenja na broj e-poruka poslanih u određenom vremenskom periodu.

Oznake: email, slanje e-pošte, smtp



Učitavanje...
Top