Zdravo. Kako moja grafomanija napreduje, odlučio sam dodati još jedan članak. Članak će, kao i uvijek, sadržavati primjere u C#, ali više ili manje vješt VB stručnjak će lako prepisati sav kod pod VB.NET.
Počnimo, valjda
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 dizajnera:
SmtpClient(string host, int port);
Kreirajmo instancu klase MailMessage:
Var msg = new MailMessage("from", "to");
Sada postavimo predmet i sadržaj pisma (usput, sve se može postaviti u konstruktoru). Također i prijavu i lozinku za smtp klijent. Zatim ćemo poslati pismo koristeći Send metodu našeg klijentskog objekta:
Var client = new SmtpClient("smtp.yandex.ru"); var msg = new MailMessage("from", "to"); msg.Subject = "Moja probna poruka"; msg.Body = "Zdravo, prijatelju! Zamisli samo da sam upravo napisao nevjerojatan program da ti pošaljem ovo besmisleno pismo milijardu puta uz samo nekoliko klikova!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // priority msg.Priority = MailPriority.High; // tijelo e-pošte u html-u? msg.IsBodyHtml = false; client.Credentials = new NetworkCredential("prijava", "lozinka"); klijent.Pošalji(msg);
To je sve. Ne zaboravite ispravno ispuniti sve potrebne podatke.
Komentari ()
ruslang02 30
CoolHacker, mogu li od tebe posuditi ovaj kod za treći dio web preglednika?
Coolhacker 770 ruslang02 30Hvala, koristit ću ga za slanje linkova e-poštom
kao u FireFoxu
Zadnja izmjena: 31.10.2015
Za slanje pošte na Internetu koristi se SMTP (Simple Mail Transfer Protocol) protokol. Ovaj protokol određuje kako poslužitelji pošte komuniciraju prilikom prijenosa E-mail.
Klasa SmtpClient iz imenskog prostora System.Net.Mail dizajnirana je za rad sa SMTP protokolom i slanje e-pošte u .NET-u.
Ova klasa definira niz svojstava koja vam omogućuju da konfigurirate slanje:
Domaćin: smtp poslužitelj s kojeg se šalje pošta. Na primjer, smtp.yandex.ru
Port: Port koji koristi smp poslužitelj. Ako nije navedeno, port 25 se koristi prema zadanim postavkama.
Vjerodajnice: podaci za autentifikaciju pošiljatelja
EnableSsl: Određuje hoće li se SSL koristiti prilikom slanja
Druga ključna klasa koja se koristi pri slanju je MailMessage. Ova klasa predstavlja poruku koja se šalje. Među njegovim svojstvima su sljedeća:
Prilozi: sadrži sve priloge pisma
Tijelo: tekst samog pisma
Od: adresa pošiljatelja. Predstavlja objekt MailAddress
Za: adresu primatelja. Također predstavlja objekt MailAddress
Predmet: definira predmet pisma
IsBodyHtml: Označava predstavlja li e-pošta sadržaj s html kodom
Iskoristimo ove klase i pošaljimo pismo:
Korištenje sustava; koristeći System.Net; koristeći System.IO; koristeći System.Threading.Tasks; koristeći System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( // pošiljatelj - postavite adresu i ime prikazano u slovu MailAddress from = new MailAddress(" [e-mail zaštićen]", "Tom"); // kome šaljemo MailAddress = nova MailAddress(" [e-mail zaštićen]"); // kreirajte objekt poruke MailMessage m = new MailMessage(from, to); // predmet pisma m.Subject = "Test"; // tekst pisma m.Body = "
Letter test rada smtp klijenta
"; // slovo predstavlja html kod m.IsBodyHtml = istina; // adresa smtp poslužitelja i port s kojeg ćemo poslati pismo SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // prijava i lozinka smtp.Credentials = new NetworkCredential(" [e-mail zaštićen]", "mypassword"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )Za slanje se koristi metoda Send() kojoj se prosljeđuje objekt MailMessage.
Možemo koristiti i asinkronu verziju slanja metodom SendMailAsync:
Korištenje sustava; koristeći System.Net; koristeći System.IO; koristeći System.Threading.Tasks; koristeći System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( SendEmailAsync().GetAwaiter(); Console.Read(); ) private static async Task SendEmailAsync() ( MailAddress from = new MailAddress(" [e-mail zaštićen]", "Tom"); MailAddress to = nova MailAddress(" [e-mail zaštićen]"); MailMessage m = nova MailMessage(from, to); m.Subject = "Test"; m.Body = "Letter test 2 smtp klijenta"; SmtpClient smtp = new SmtpClient("smtp.gmail.com" , 587); smtp.Credentials = new NetworkCredential(" [e-mail zaštićen]", "mypassword"); smtp.EnableSsl = true; čekaj smtp.SendMailAsync(m); Console.WriteLine("Poruka poslana"); ) ) )
Dodavanje privitaka
Pismu možemo priložiti priloge pomoću svojstva Attachments. Svaki privitak predstavlja objekt System.Net.Mail.Attachment:
MailAddress from = nova MailAddress(" [e-mail zaštićen]", "Tom"); MailAddress to = nova MailAddress(" [e-mail zaštićen]"); MailMessage m = nova MailMessage(od, do); m.Attachments.Add(new Attachment("D://temlog.txt"));
Jedna od najpopularnijih funkcija na web mjestu je obrazac za prijavu ili narudžbu, čiji se podaci šalju e-poštom vlasniku web mjesta. Takvi obrasci u pravilu su jednostavni i sastoje se od dva ili tri polja za unos podataka. Kako izraditi takvu narudžbenicu? Ovo zahtijeva korištenje HTML jezika za označavanje i PHP programskog jezika.
Sam HTML jezik za označavanje je jednostavan; samo trebate smisliti kako i gdje staviti određene oznake. S programskim jezikom PHP stvari su malo kompliciranije.
Za programera stvaranje takvog obrasca nije teško, ali za dizajnera HTML izgleda neke radnje mogu se činiti teškima.
Napravite obrazac za slanje podataka u html-u
Prvi redak bit će sljedeći
Sada spojimo sve zajedno.
Učinimo sada polja u obrascu obaveznima. Imamo sljedeći kod:
Napravite datoteku koja prihvaća podatke iz HTML obrasca
Ovo će biti datoteka pod nazivom send.php
U datoteci, u prvoj fazi, trebate prihvatiti podatke iz niza pošte. Da bismo to učinili, kreiramo dvije varijable:
$fio = $_POST["fio"];
$e-pošta = $_POST["e-pošta"];
Nazivima varijabli u PHP-u prethodi znak $, a točka-zarez se stavlja na kraju svakog retka. $_POST je niz u koji se šalju podaci iz forme. U html obrascu način slanja naveden je kao method="post". Dakle, dvije varijable su preuzete iz html forme. Kako biste zaštitili svoju stranicu, morate ove varijable propustiti 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 se ne kreiraju u php-u, već se koriste postojeće. Filtar će transformirati lik "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Druga funkcija dekodira URL ako ga korisnik pokuša dodati u obrazac.
$fio = urldecode($fio);
$e-pošta = urldecode($e-pošta);
Trećom funkcijom ćemo ukloniti razmake s početka i kraja retka, ako ih ima:
$fio = trim($fio);
$e-pošta = trim($e-pošta);
Postoje i druge funkcije koje vam omogućuju filtriranje php varijabli. Njihova upotreba ovisi o tome koliko ste zabrinuti da će napadač pokušati dodati programski kod u ovaj html obrazac za slanje e-pošte.
Validacija podataka prenesenih iz HTML obrasca u PHP datoteku
Kako biste provjerili radi li ovaj kod i prenose li se podaci, možete ga jednostavno prikazati na ekranu pomoću funkcije echo:
odjek $fio;
jeka "
";
echo $e-pošta;
Drugi red ovdje je potreban za odvajanje izlaza php varijabli u različite retke.
Slanje primljenih podataka iz HTML obrasca na e-poštu pomoću PHP-a
Za slanje podataka e-poštom 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 upravitelja stranice [e-mail zaštićen].
Predmet pisma treba biti jasan, a poruka pisma treba sadržavati ono što je korisnik naveo u HTML obrascu.
pošta(" [e-mail zaštićen]", "Prijava sa stranice", "Puno ime:".$fio.". E-pošta: ".$email ,"Od: [e-mail zaštićen]\r\n");
Potrebno je dodati uvjet koji će provjeravati da li je formular poslan PHP-om na navedenu email adresu.
ako (mail(" [e-mail zaštićen]", "Naručite sa stranice", "Puno ime:".$fio.". E-pošta: ".$email ,"Od: [e-mail zaštićen]\r\n"))
{
echo "poruka uspješno poslana";
) inače (
}
Dakle, programski kod send.php datoteke, koja će poslati podatke HTML obrasca na e-mail, izgledat će ovako:
$fio = $_POST["fio"];
$e-pošta = $_POST["e-pošta"];
$fio = htmlposebni znakovi($fio);
$e-pošta = htmlspecialchars($e-pošta);
$fio = urldecode($fio);
$e-pošta = urldecode($e-pošta);
$fio = trim($fio);
$e-pošta = trim($e-pošta);
//echo $fio;
//jeka "
";
//echo $e-pošta;
ako (mail(" [e-mail zaštićen]", "Prijava sa stranice", "Puno ime:".$fio.". E-pošta: ".$email ,"Od: [e-mail zaštićen]\r\n"))
( echo "poruka uspješno poslana";
) inače (
echo "došlo je do pogreške prilikom slanja poruke";
}?>
Tri retka za provjeru prenose li se podaci u datoteku su komentirana. Ako je potrebno, mogu se ukloniti jer su bili potrebni samo za otklanjanje pogrešaka.
HTML i PHP kod za slanje obrasca stavljamo u jednu datoteku
U komentarima na ovaj članak mnogi postavljaju pitanje kako osigurati da i HTML obrazac i PHP kod za slanje podataka na e-mail budu u jednoj datoteci, a ne u dvije.
Da biste implementirali ovaj rad, trebate postaviti HTML kod obrasca u datoteku send.php i dodati uvjet koji će provjeravati prisutnost varijabli u POST nizu (ovaj niz se šalje iz obrasca). Odnosno, ako varijable u nizu ne postoje, korisniku trebate pokazati obrazac. U suprotnom, trebate primiti podatke iz polja i poslati ih primatelju.
Pogledajmo kako promijeniti PHP kod u datoteci send.php:
//provjeri postoje li varijable u POST nizu
if(!isset($_POST["fio"]) i !isset($_POST["email"]))(
?> ) inače (
//pokaži obrazac
$fio = $_POST["fio"];
$e-pošta = $_POST["e-pošta"];
$fio = htmlposebni znakovi($fio);
$e-pošta = htmlspecialchars($e-pošta);
$fio = urldecode($fio);
$e-pošta = urldecode($e-pošta);
$fio = trim($fio);
$e-pošta = trim($e-pošta);
ako (mail(" [e-mail zaštićen]", "Prijava sa stranice", "Puno ime:".$fio.". E-pošta: ".$email ,"Od: [e-mail zaštićen]\r\n"))(
echo "Poruka je uspješno poslana";
) inače (
echo "Došlo je do pogreške prilikom slanja poruke";
}
}
?>
Postojanje varijable u POST nizu provjeravamo PHP funkcijom isset(). Uskličnik ispred ove funkcije u uvjetu znači negaciju. Odnosno, ako varijabla ne postoji, tada trebamo prikazati naš oblik. Da nisam stavio uskličnik, uvjet bi doslovno značio "ako postoji, onda pokaži obrazac." A to je u našem slučaju pogrešno. Naravno, možete ga preimenovati u index.php. Ako preimenujete datoteku, ne zaboravite promijeniti naziv datoteke u retku