Programsko slanje e-pošte korištenjem različitih servisa. Slanje e-pošte C pošaljite pismo pošti

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 30

Hvala, koristit ću ga za slanje linkova e-poštom
kao u FireFoxu

LetSevI 10

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

Ovo je vrlo važan element obrasca. U njemu označavamo kako će se podaci prenijeti iu koju datoteku. U u ovom slučaju sve se šalje metodom POST u datoteku send.php. Program u ovoj datoteci mora prema tome primiti podatke, oni će biti sadržani u nizu za objavu, i poslati ih na navedenu adresu e-pošte.

Vratimo se formi. Drugi red sadrži polje za unos vašeg punog imena. Ima sljedeći kod:

Tip obrasca je tekstualni, odnosno korisnik će ovdje moći unositi ili kopirati tekst s tipkovnice. Parametar name sadrži naziv forme. U ovom slučaju, to je fio; pod ovim imenom će se prenijeti sve što je korisnik unio u ovo polje. Parametar rezerviranog mjesta određuje što će biti napisano u ovom polju kao objašnjenje.

Sljedeći redak:

Ovdje je gotovo sve isto, ali naziv za polje je email, a objašnjenje je da korisnik u ovu formu upisuje svoju email adresu.

Sljedeći red bit će gumb "pošalji":

A posljednji redak u obrascu bit će oznaka

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:



Obrazac za prijavu sa stranice


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

. Obrazac treba povezivati ​​na istu stranicu, na primjer index.php. Dodao sam naslov stranice kodu.

Uobičajene pogreške koje se javljaju prilikom podnošenja PHP obrasca s web stranice

Prva, vjerojatno najpopularnija pogreška, je kada vidite praznu bijelu stranicu bez poruka. To znači da ste pogriješili u kodu stranice. Morate omogućiti prikaz svih grešaka u PHP-u i tada ćete vidjeti gdje je greška napravljena. Dodajte kodu:

ini_set("prikaz_pogreški","Uključeno");
error_reporting("E_ALL");

Datoteka send.php mora se izvoditi samo na poslužitelju, inače kôd jednostavno neće raditi. Preporučljivo je da ovo nije lokalni poslužitelj, budući da nije uvijek konfiguriran za slanje podataka vanjskom poslužitelju e-pošte. Ako kod ne pokrenete na poslužitelju, tada će se PHP kod prikazati izravno na stranici.

Stoga, za ispravan rad, preporučujem postavljanje datoteke send.php na hosting stranice. U pravilu je tamo sve već konfigurirano.

Još jedna česta pogreška je kada se pojavi obavijest "Poruka je uspješno poslana", ali pismo ne stigne poštom. U ovom slučaju morate pažljivo provjeriti liniju:

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"))

Umjesto [e-mail zaštićen] mora postojati adresa e-pošte na koju treba poslati pismo, ali umjesto toga[e-mail zaštićen] mora biti postojeća e-pošta za ovu stranicu. Na primjer, za web stranicu to će biti . Samo u tom slučaju bit će poslano pismo s podacima iz obrasca.

Zapovjednik broda 14. listopada 2013. u 19:29

Programsko slanje e-pošte korištenjem raznih usluga

Vrlo često se morate nositi 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, slično sam pogledao na Internetu i nemalo se iznenadio da gotovo svugdje nude ili neko rješenje koje ne radi ili je zastarjelo ili je jednostavno nepismeno napisano.

Prva stvar koju ne biste trebali učiniti na temelju ovih primjera je koristiti System.Web.Mail, koji je odavno zastario, a počevši od Visual Studio 2010, ne možete ni dodati System.Web biblioteku bez poznavanja punog puta u odgovarajući DLL.
Umjesto toga predlaže se korištenje knjižnice System.Net.
koristeći System.Net; koristeći System.Net.Mail;
Dakle, najjednostavnija stvar, koja je ujedno i najvažnija i najčešće korištena, je slanje pisma sa vašeg mail servera na kojem je konfiguriran SMTP klijent. Kao što razumijete, poslužitelj može biti onaj na kojem se pokreće aplikacija ili udaljeni na kojem imate prava slati pisma bez dodatne autorizacije.

Primjer koda za slanje pisma s lokalnog stroja:
", "[e-mail zaštićen]"))( mm.Subject = "Predmet pošte"; mm.Body = "Tijelo pošte"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("127.0.0.1"))(//Adresa bi trebala biti ovdje poslužitelj pošte i port, ako je potrebno sc.Send(mm);

Korištenje usluga e-pošte kao što su Gmail, Yandex, Mail.ru itd. sve je isto, samo su dodani parametri s autorizacijom.

SMTP poslužitelj: smtp.gmail.com
Luka: 587
koristeći (MailMessage mm = new MailMessage("Ime ", "[e-mail zaštićen]"))( mm.Subject = "Predmet e-pošte"; mm.Body = "Tijelo e-pošte"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.Credentials = new NetworkCredentials(" [e-mail zaštićen]", "GmailPassword"); sc.Send(mm); ) )

SMTP poslužitelj: smtp.yandex.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[e-mail zaštićen]"))( mm.Subject = "Predmet e-pošte"; mm.Body = "Tijelo e-pošte"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.Credentials = new NetworkCredentials(" [e-mail zaštićen]", "YandexPassword"); sc.Send(mm); ) )

SMTP poslužitelj: smtp.mail.ru
Luka: 25
koristeći (MailMessage mm = new MailMessage("Ime ", "[e-mail zaštićen]"))( mm.Subject = "Predmet e-pošte"; mm.Body = "Tijelo e-pošte"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.Credentials = new NetworkCredentials(" [e-mail zaštićen]", "MailRuPassword"); sc.Send(mm); ) )
Ako vaš poštanski sandučić na usluzi mail.ru završava na inbox.ru, list.ru ili bk.ru, tada se adresa SMTP poslužitelja 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 e-pošte u svojim programima, trebate samo saznati adresu i port SMTP poslužitelja, kao i pravila autorizacije.

Također je važno zapamtiti da gotovo sve usluge e-pošte trećih strana nameću ograničenja na broj poslanih e-poruka u određenom vremenskom razdoblju.

Oznake: e-pošta, slanje pisama, smtp

Slanje poruka e-poštom u Visual Studio 2013 C++


Čini se, zašto ponovno izumiti kotač? Postoji mnogo programa koji mogu slati e-poštu: i plaćeni i besplatni. U ovim programima možete slati pisma ne jednom, već više primatelja odjednom. Međutim, dodavanje primatelja još uvijek se obavlja ručno; unos njihovih adresa je posao, pogotovo ako ih ima više od desetak. Što ako trebate redovito slati stotine e-poruka? I ne govorim o spamu, nego mislim na potpuno legalne mailinge?

U ovom slučaju, poseban program može doći u pomoć. Ovaj članak neće sadržavati takav cijeli program, već mali program koji jednostavno šalje jedno pismo na jednu adresu. U ovom slučaju, autorizacija se događa putem smpta, odnosno pismo se ne šalje s nepoznatog mjesta, već iz vrlo stvarnog poštanskog sandučića. Primjer koristi mail.ru.

Dakle, evo teksta programa.

#uključi "stdafx.h" #upotrebom korištenje imenskog prostora Sustav; korištenje imenskog prostora System::Net; korištenje imenskog prostora System::Net::Mail; korištenje imenskog prostora System::Net::Mime; korištenje imenskog prostora System::Threading; korištenje imenskog prostora System::ComponentModel; int main() ( SmtpClient ^Smtp = gcnew SmtpClient("smtp.mail.ru", 25); Smtp->Credentials = gcnew NetworkCredential("[email protected]", "your_password"); Smtp->EnableSsl = true MailMessage = gcnew MailAddress("vaš[email protected]"); = "Header"; Message->Body = "Message"; Smtp->Send(Message); Vrijedno je spomenuti koji uvjeti moraju biti ispunjeni: projekt u Visual Studio 2013 se kreira ne samo za C++, već i za konzolu, podržavaju CLR okruženje. Pogledajmo pobliže što se događa i na kojoj liniji u ovom C++ programu koji šalje poruku u odabrani pretinac e-pošte.

Od redaka 1 do 8 povezuju se datoteke zaglavlja i prostori imena. Linija 13 inicijalizira smpt poslužitelj. Yandex i Google koriste svoje: smtp.yandex.ru odnosno smtp.google.ru. Broj 25 na ovoj liniji je luka. Ako vaš pružatelj usluga blokira ovaj priključak ili se ne možete spojiti, možete isprobati sljedeće opcije: 465 ili 587. U retku 14 morate unijeti svoj račun e-pošte (s kojeg će pismo biti poslano) i lozinku za ovaj poštanski sandučić.

Posebnu pozornost posvećujemo liniji 15 - ovdje je spojen sigurni ssl protokol. Ovo je potrebno za Yandex i Mail. Linija 17 stvara poruku; na 18 - povratna adresa; na 19 - adresa primatelja; 20 - zaglavlje pisma; 21 - poruka; linija 22 šalje. Ako se nakon pokretanja programa ne pojavljuju greške, ništa se ne događa, onda je sve u redu - provjerite poštanski sandučić primatelja.

Ako imate barem neke manje vještine programiranja, završiti ostatak će biti vrlo lako. Trebate napraviti prozor, obrazac, nekoliko polja za unos u obrascu, natjerati program da učita popis adresa iz npr. tekstualne datoteke ili MS Access baze podataka. Ako vam to još nije sasvim jasno, onda ću vam u sljedećim člancima sve detaljnije ispričati.

Sva pitanja o programima u C++, java, skriptama u java script i php, izradi i izgledu web stranice možete postaviti putem pošte [e-mail zaštićen] ili pokucaj na Skype up777up2. Za vrlo razumnu naknadu rado ću vam pomoći.

Dodatak

Jedan od posjetitelja bloga postavio je pitanje: kako priložiti datoteku u ovom programu? Odgovor je jednostavan: trebate dodati nekoliko redaka koda u aplikaciju:

String^ att = L"att.xls"; Attachment^ dan = gcnew Attachment(att, MediaTypeNames::Application::Octet); Poruka->Prilozi->Dodaj(dan); U prvom retku definiramo priloženu datoteku, u drugom definiramo podatak i nalog da se ne tumači (Content-Type zaglavlje MIME protokola) i u trećem ga dodamo u pismo. To je sve.