Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Greške
  • Najbolji sakupljač pošte. Sakupljač pošte (otežava jednostavne stvari)

Najbolji sakupljač pošte. Sakupljač pošte (otežava jednostavne stvari)

Prebacivanje s jedne kartice s Gmailom na drugu s Yandex.Mailom prilično je zamorno. A ako imate desetak računa kod različitih pružatelja pošte, jutarnja provjera nove korespondencije pretvara se u mučenje. Kombiniranjem slova na jednom mjestu riješit ćete se te neugodnosti.

Web sučelje

Većina pružatelja usluga e-pošte nudi ugrađenu značajku za prikupljanje e-pošte iz više poštanskih sandučića. Na primjer, pokušajmo prikupiti pisma iz svih vaših poštanskih sandučića na jednom Gmail računu.

Prije svega, provjerite ima li poštanski servis s kojeg želite preuzeti poštu POP pristup. Zatim idite na postavke Gmaila i kliknite "Postavke" u gornjem desnom kutu. Idite na karticu "Računi" i pronađite odjeljak "Primanje pošte s drugih računa".

Dodajte račun, unesite svoju adresu e-pošte i kliknite Dalje, zatim unesite svoju lozinku. Kako bi razmjena pošte između pružatelja bila sigurnija, provjerite je li uključena opcija "Uvijek koristi sigurnu vezu (SSL) prilikom primanja pošte". Zatim kliknite na "Dodaj račun".

Sada će se pisma koja stižu na dodanu adresu automatski skupljati u vaš Gmail Inbox. Možete dodati onoliko adresa e-pošte koliko vam je potrebno.

Desktop klijenti

E-pošta treba softver. Da, možete učiniti puno u web-pošti (ponekad puno više nego što vam Google trenutno dopušta u Gmailu). Ali web sučelje se ne može usporediti s izvornom aplikacijom. Čak je i najmodernije web sučelje usko grlo u radu s poštom.

Rafe Needleman, Cnet.com

Klijenti e-pošte za stolna računala dobri su jer mogu prikupljati e-poštu s više računa. U isto vrijeme možete raditi s desecima adresa i čak ne razmišljati o tome koji davatelj usluga pohranjuje ovu ili onu poruku.

Većina klijenata e-pošte za stolna računala ima ugrađenu zajedničku pristiglu poštu. Čak i ako vaš omiljeni klijent podržava samo odvojene pretince za pristiglu poštu, svejedno ih možete lako skupiti pomoću pametnih filtara.

Iako je Outlook dizajniran za upravljanje više poštanskih sandučića u isto vrijeme, još uvijek prikazuje zasebnu ulaznu poštu za svaki račun. Ali to se lako može popraviti filtrima.

Otvorite Outlook, idite na karticu "Folders" i kliknite "Create Search Folder" na alatnoj traci. Zatim odaberite "Stvori prilagođenu mapu za pretraživanje". Kliknite na "Odaberi", ali nemojte odabrati kriterije pretraživanja kako bi se sve nove poruke slale u mapu. Imenujte mapu kako god želite, primjerice Sva pošta.

Kliknite na "Pregledaj", odaberite sve mape i sandučiće iz kojih želite prikupljati poštu te označite opciju "Traži u podmapama".

Sada će se u pametnoj mapi koju ste stvorili pojaviti poruke sa svih računa e-pošte koje ste dodali u Outlook. Možete omogućiti opciju "Prikaži u Favoritima" tako da vaša nova pošta bude uvijek vidljiva.

Mac klijent e-pošte pruža jednu mapu za dolaznu e-poštu sa svih povezanih računa. Samo dodajte svoje račune i sve nove e-poruke bit će prikupljene na jednom mjestu.

Vrlo je jednostavno prikupiti sve svoje e-poruke u jednu pristiglu poštu u Thunderbirdu. Idite na izbornik Pogled (ako traka izbornika nije vidljiva, pritisnite Alt). Zatim odaberite "Mape" → "Kombinirano". Sada ćete imati jedan Inbox za nove poruke e-pošte, jednu mapu Skice, jednu mapu Poslane stavke i jednu arhivu. Ne morate tražiti što je gdje. U tom će slučaju poruke, kao i dosad, biti pohranjene na poslužiteljima vaših davatelja usluga e-pošte.

Mobilni klijenti

Objedinjeni Inbox dostupan je u mnogim mobilnim klijentima e-pošte, uključujući Gmail. Aplikacija Gmail prikuplja vašu pristiglu poštu sa svih računa e-pošte, uključujući Yahoo, Outlook ili druge usluge.

Ako vam se ne sviđa aplikacija Google, možete isprobati klijente e-pošte trećih strana kao što su Outlook ili MyMail.

Možda imate svoje ideje kako grupirati poštu na jednom mjestu? Podijelite u komentarima.

Uputa

Prijavite se na svoj račun, kako biste to učinili, idite na sljedeću poveznicu http://gmail.com i unesite svoje korisničko ime i lozinku.

Kliknite na ikonu zupčanika u gornjem desnom kutu "Računi i uvoz". Zatim idite na blok "Pošalji e-poštu kao" i kliknite vezu "Dodaj svoju drugu adresu e-pošte".

U novom skočnom prozoru unesite ime i prezime na koje je registrirana dodana e-pošta, kao i e-mail adresu. Kliknite na gumb "Sljedeći korak".

Zatim će vas zaslon pitati kako slati pisma koristeći ovu adresu - koristeći uslugu Gmail ili QIP sučelje za poštu. Preporučljivo je navesti Gmail, manje postavki, stoga će se potrošiti manje vremena. Kliknite na gumb "Sljedeća radnja".

U sljedećem prozoru dobivate obavijest da ćete nakon klika na gumb "Pošalji potvrdu" morati provjeriti navedeni e-mail, kako bi Gmail bio siguran da e-mail adresa stvarno postoji. Pritisnite gumb i otvorite svoj poštanski sandučić u novoj kartici.

Pregledajte svoje nepročitane e-poruke i otvorite e-poštu s naslovom "Gmail potvrda". Kliknite vezu kako biste potvrdili postojanje ove adrese e-pošte ili kopirajte kod.

Ako ste kopirali kod, zalijepite ga u prazno polje prozora "Dodaj još..." i kliknite gumb "Potvrdi". Nakon nekog vremena ovaj će se prozor automatski zatvoriti i nova e-pošta će se pojaviti na popisu "Pošalji e-poštu kao".

Sada, slično kao što je opisano, trebate dodati novu adresu u blok "Prikupljanje pošte s drugih računa". Da biste to učinili, kliknite vezu "Dodajte svoj POP3 račun e-pošte".

Unesite svoju adresu e-pošte u novi prozor koji će se pojaviti. Kliknite na gumb "Sljedeća radnja". U sljedećem prozoru morate unijeti lozinku i aktivirati opcije "Uvijek koristi sigurnu vezu" i "Dodijeli oznaku dolaznim porukama." Zatim kliknite gumb "Dodaj račun". Nakon nekog vremena ovaj će se prozor automatski zatvoriti i na popisu "Prikupljanje pošte s drugih računa" pojavit će se nova e-pošta.

E-mail je postao sastavni dio života korisnika na Internetu. Postoje mnogi resursi koji pružaju poštanski sandučić. Često je potrebno provjeriti Postojanje ladica, njegovu pouzdanost. Ako trebate saznati o autentičnosti adrese e-pošte, onda u tome nema ništa teško.

Uputa

Registrirajte e-mail adresu s istim imenom ako ste zainteresirani za e-mail kreiran na nekom besplatnom izvoru. Prethodno postojeću e-poštu nije moguće ponovno registrirati. Svi poznati poslužitelji e-pošte opremljeni su sustavom povratnih obavijesti. U tom slučaju dobit ćete obavijest o pogrešci koja će vas obavijestiti da daljnja registracija nije moguća.

Pokušajte napisati pismo s e-pošte koja vam je dostupna ladica na željeni e-mail. Poruka može biti sa ili bez teksta. Pošaljite ga i nakon nekog vremena provjerite ima li poslanih pisama u vašoj e-pošti. Ako ste primili obavijest da vaše pismo nije stiglo na željenu adresu, ta pošta možda ne postoji.

Registrirajte se u mreži Moj svijet. Ovo je društvena mreža u RuNetu u kojoj mnogi korisnici komuniciraju. Koristite pretraživanje na računima drugih korisnika. Upišite željenu e-poštu u traku za pretraživanje koja se nalazi u desnom kutu na vrhu stranice stranice. Možete kliknuti na gumb "Ljudi". Bit ćete preusmjereni na pretragu računa na temelju različitih kriterija. Samo unesite e-mail koji vas zanima u polje koje ćete pronaći pod nazivom "Traži". Morate kliknuti "Pronađi". Ako je poštanska adresa valjana, vidjet ćete podatke o vlasniku pošte.

Ako imate sandučiće na drugim poštanskim servisima, postavite sakupljač pošte kako bi sve informacije bile na jednom mjestu.

Da bi sakupljač ispravno radio, morate ga konfigurirati samo pod Mail.Ru računom. Provjerite jeste li prijavljeni na svoj Mail.Ru račun prije nego počnete prikupljati e-poštu s drugih usluga e-pošte.

Za dodavanje okvira:

  1. Kliknite na logo usluge na kojoj imate poštanski sandučić. Ako vaša usluga nije navedena, kliknite Druga pošta.
  2. Unesite naziv poštanskog sandučića i lozinku, kliknite "Dodaj". Ako vidite poruku o pogrešci - provjerite ispravnost unesenih podataka i pokušajte ponovno. Ako su podaci ispravno uneseni, dobit ćete potvrdu i možete nastaviti s konfiguracijom sakupljača pošte.

Ovisno o tome koji protokol podržava usluga na kojoj se poštanski sandučić nalazi, postavka se može razlikovati:

IMAP

  1. Odredite u koju mapu želite premjestiti e-poštu i kliknite "Spremi".
  2. Ako u pretincu iz kojeg ćete preuzimati poštu imate osobne mape, one će biti priložene odabranoj mapi.

Sinkronizirane su i mape sustava: "Skice", "Poslano", "Neželjena pošta" i "Smeće". Ako ćete uvoziti e-poštu iz poštanskog sandučića treće strane u svoj poštanski sandučić, odredite želite li primijeniti filtre konfigurirane u trenutnom poštanskom sandučiću na dolaznu poštu.

Ako je prikupljanje pisama konfigurirano korištenjem IMAP protokola, moći ćete odgovoriti na pisma iz poštanskog sandučića na koji je pismo poslano.

POP3

  1. Označite okvir "Sva pošta" da uvezete svu poštu iz poštanskog sandučića. Ako želite označiti sve uvezene e-poruke kao pročitane, potvrdite okvir "Označi sve stare e-poruke kao pročitane".
  2. Odaberite u koju mapu želite staviti e-poštu iz ovog sandučića. Ako želite stvoriti novu mapu, potvrdite okvir pokraj padajućeg popisa i unesite naziv mape.
  3. Da biste primijenili filtre koji su konfigurirani u poštanskom sandučiću na poruke s drugih poslužitelja, potvrdite okvir pored "Primijeni filtre na primljene poruke".
  4. Pritisnite Spremi.

Tako možete odrediti do 9 poštanskih sandučića iz kojih će se primati pisma. Da biste onemogućili sakupljač pošte, postavite prekidač na položaj "ISKLJUČENO". Ako želite urediti postavke, kliknite "Uredi". Za uklanjanje slavine kliknite Ukloni.

U ovom ćemo članku govoriti o tome što su "pošta iz drugih sandučića" i "prikupljanje pisama s drugih računa". Recenzije i usporedbe usluga e-pošte.

Kako se funkcionalnost mail servisa ažurira, novosti ćemo objaviti na kraju ovog članka.

Mail.ru servis za poštu, Yandex i Google tražilice već nekoliko godina nude vrlo korisnu i potrebnu funkcionalnost koja vam omogućuje kombiniranje svih ostalih računa e-pošte u jednu poštu. Drugim riječima, vrijedi jednom dodati i konfigurirati sve svoje "mailove" i postat će moguće upravljati njima u jednom prozoru bez stalnog unosa prijave i lozinke.

Usluge pošte nude nam veliko mjesto za pohranjivanje svih dolaznih pisama, korisničko sučelje, dobru funkcionalnost upravljanja i još mnogo toga. Za testiranje mogućnosti navedenih mail servisa izdvojit ćemo tri parametra za ocjenu njihova rada: 1) potrebno je upravljati različitim e-mail računima, uključujući one s raznih servisa i stranica, preko jednog mail klijenta; 2) imati svojeručni potpis i ime za svaku poštu; 3) izbrišite poruke s poslužitelja onih računa pošte koji su dodani u mail, yandex ili google mail.

Naš zadatak izgleda ovako:

Pa krenimo. Prvi smo testirali uslugu Mail.ru, koja nam kaže: “Možete skupljati poštu iz svih svojih poštanskih sandučića u jedan poštanski sandučić na Mail.ru.

Postavite prikupljanje e-pošte s bilo kojeg poslužitelja koji koristi IMAP ili POP3 protokol. Da biste dodali vanjsku poštu osim @mail, @inbox, @list, @bk, morate imati barem jednu poštu koja već postoji na navedenim poslužiteljima iz pošte. Drugim riječima, prvo registrirajte mail-mail, a zatim dodajte druge mail račune. Proces registracije za mail je jednostavan, nema smisla opisivati ​​ga, ali ćemo opisati dodavanje drugih e-mailova na ovaj mail račun.


Zatim će se od vas tražiti da unesete prijavu i lozinku za bilo koji poštanski sandučić koji koristite, au roku od 3-5 minuta "Sakupljač pošte iz pošte" će stvoriti mapu s nazivom dodane pošte pored "pristigle pošte" , “poslano”, “spam” i ostalo.


Zapravo, sakupljač pošte će raditi u roku od 10-15 minuta i dodati će sva slova u novostvorenu mapu iz okvira koji ste naveli. Sva dolazna pisma za novi e-mail bit će poslana u ovu mapu, također će biti moguće slati pisma iz priloženog sandučića. Prilikom kreiranja novog pisma pojavit će se polje "Od" u kojem možete odabrati iz kojeg sandučića će pismo biti poslano.


Prednosti usluge pošte Mail.ru uključuju jednostavnost dodavanja i jednostavnost postavljanja drugih poštanskih sandučića, nema potrebe za navođenjem raznih protokola (POP3, SMTP). Ovo je vrlo važno jer ne zna svaki korisnik što je to.

Nedostaci Mail.ru su u tome što je nemoguće dodijeliti ime i potpis za svaki novododani mail (bilo koji novi e-mail osim glavnog), odnosno ime i potpis glavnog maila bit će distribuirani svaka adresa i to je to. Još jedan veliki nedostatak je taj što prilikom učitavanja e-pošte u mail ne postoji način da se izvorna e-pošta automatski izbriše s priloženog poslužitelja poštanskog sandučića. Zašto je toliko važno brisati poruke s poslužitelja dodanog poštanskog sandučića? Time ćete izbjeći ispunjavanje priloženog maila, jer. Vanjski računi e-pošte obično su premali za pohranu e-pošte. Na primjer, ako je prostor za poštu na vanjskom računu pun, Mail.ru neće prikazati nijednu novu poruku sve dok ne uđete u sučelje za vanjsku poštu i izravno izbrišete poruke iz njega kako biste oslobodili prostor. Osim toga, vezujemo poštu za Mail u nadi da ćemo dobiti puno prostora za pohranu naše pošte, koji može biti ograničen resursima hostinga. Dakle, unatoč činjenici da Mail.ru nudi gotovo neograničenu veličinu poštanskog sandučića, kada dodajete poštu iz druge zone domene (na primjer, ), vaši dodani resursi e-pošte neće se povećati u Mail.ru, ali će i dalje biti hosting s ograničenim resursima (u našem slučaju resursi primer.ru).

Mogućnost dodavanja druge pošte u uslugu Mail nije zadovoljila naš zadatak u dva boda od tri, ukupno je dobila jedan bod.


Istina, Mail.ru ima još jedan način za dodavanje vanjske pošte, točnije, povezivanje ili prijava na vanjsku poštu. Ovako izgleda:


Ova metoda nije prikladna za naš zadatak, jer ovo nije skupljač pošte, već korisnički način rada koji se povezuje s poštom i svaki put učitava sve mape i pisma u sučelje pošte. Ali ovdje je moguće dodati osobni potpis i ime za svaki mail, moguće je slati pisma s konfiguriranog maila. Brisanje e-pošte iz preuzetih poštanskih sandučića ne funkcionira. nije sakupljač pošte.

Važno! Neki korisnici pogrešno misle da ako su slova prikazana u pošti, tada se pošta iz koje je došlo do preuzimanja može izbrisati. Još jednom obratimo pozornost da Mail.ru radi kao preglednik pošte, a ako obrišete poštu, ona će biti izbrisana iu glavnom poštanskom sandučiću iu pošti.

Drugi subjekt Yandex sa svojim sakupljačem pisama. Zadaci su slični: prikupiti poštu, dodijeliti potpis i ime svakoj pošti te izbrisati svu poštu iz dodanog sandučića.

Yandexov sakupljač pošte konfiguriran je na sličan način, ali ako je pošta povezana s neke web-lokacije, na primjer site.ru, tada će trebati odrediti dodatne postavke, pogledajte snimak zaslona.


Usluga pošte obavila je ovaj posao umjesto nas, dok Yandex nudi ručno postavljanje svih postavki iz pošte treće strane. Ovdje nema ništa komplicirano: u polje za prijavu unosimo puno ime pošte (), u polje poslužitelja unosimo samo domenu (site.ru), bolje je ostaviti sve ostale postavke prema zadanim postavkama ili ih promijeniti ako znaš što radiš. Nakon uspješnog dodavanja pošte pojavit će se natpis:


Za razliku od skupljača pošte, Yandex nudi odabir hoće li se izvorna pisma spremiti u dodani poštanski sandučić ili ne. U svim ostalim aspektima, Yandexov sakupljač pisama radi na sličan način kao i Mail.ru, moguće je odabrati poštanski sandučić iz kojeg želite poslati pismo. Ali Yandex ima isti problem s potpisivanjem pisama: ne postoji način za postavljanje pojedinačnog imena i potpisa za svaki dodani poštanski sandučić.


Sudeći po navigaciji, moguće je dodati pojedinačni potpis za svaki sandučić, ali u stvarnosti to ne radi. Odaberemo poštu, propisujemo ime i potpis, kliknemo Spremi. To je to, potpis je spremljen i radi, ali se čuva i za sve ostale sandučiće, odnosno dodjeljivanjem imena i potpisa jednom sandučiću automatski mijenjate te postavke u svim mailovima objedinjenim u Yandexu. Čak i ako je odabran bilo koji drugi okvir, potpis će sada svugdje biti isti.

Ukupno, Yandex se uspješno nosio s prikupljanjem i sortiranjem pošte, može izbrisati originalna pisma iz dodanog poštanskog sandučića, ali ne može raditi s potpisima! Yandex sakupljač e-pošte nije se uspio nositi s našim zadatkom i postiže dva boda od tri.


Htio bih napomenuti da se, nakon “čeprkanja” po sva tri servisa za sklapanje pošte, čini da je Mail na brzinu “prokockao” svoju funkcionalnost. Iako će zadovoljiti većinu korisnika, ali, da budemo iskreni, Mail je napravio sakupljač pošte za pokazivanje, kako bi bio zapažen u natjecateljskoj utrci. Sve radi dobro i bez kvarova, ali asembler iz Mail-a nije se nosio s našim zadatkom. Postoji nekoliko oglasnih blokova u sučelju pošte, ali oni ne ometaju rad s pismima.

Što se tiče Yandexa, koji je davno stvorio sakupljač e-pošte, čini se da ova industrija nije podržana, jer popravljanje tako jednostavne funkcionalnosti (mogućnost dodavanja više potpisa za poštanske sandučiće) ne bi trebalo biti teško za tako moćnu pretragu motor. Međutim, Yandex ima još jednu jedinstvenu funkcionalnost koja vam omogućuje vezanje domena na njihove dns poslužitelje, a kasnije stvaranje i konfiguriranje pošte. Ali takve operacije i postavke zahtijevaju znanje i vrijeme. I iako tu nema ništa komplicirano, u svakom slučaju, ovo nije za većinu korisnika Runeta. Velika prednost- nema oglasa u sučelju pošte Yandex! Minus- Ograničenje od 10 poštanskih sandučića u sakupljaču pisama.

Finalist i pobjednik je skupljač e-pošte iz Googlea, koji se s našim zadatkom nosio s praskom, unatoč Ograničenje od 5 kutija

Nedavno je izdana još jedna verzija Mail.Ru Mail-a za iPhone i iPad. Glavno ažuriranje je jedno, ali značajno: to je mogućnost prikupljanja svih poštanskih sandučića korisnika na jednom mjestu, naime u aplikaciji Mail.Ru Mail.

Sva pošta na jednom mjestu. Većina nas ima nekoliko e-mailova - za posao, za registraciju na svim vrstama foruma, stranica s kuponima i internetskih trgovina te za dušu (čitaj - za komunikaciju s prijateljima, rođacima itd.). U prethodnoj verziji aplikacije Mail.Ru programeri su napravili prvi korak prema pojednostavljenju upravljanja "zoološkim vrtom" računa: dodali su podršku za nekoliko poštanskih sandučića.

Sada u klijentu Mail.Ru Mail možete raditi ne samo s poštanskim sandučićima na ovoj usluzi, već i s računima Gmaila, Ramblera, Outlooka i drugih pružatelja usluga koji podržavaju IMAP / POP3. Prebacivanje između okvira je vrlo jednostavno - to je stvar jednog klika. Dok korisnik pregledava jedan račun, drugi strpljivo čekaju svoj red.

Aplikacija ne preslaguje redoslijed u različitim ladicama na svoj način. U svakom od računa možete nastaviti točno onom logikom rada na koju ste navikli. Na primjer, u sučelju aplikacije Mail.Ru nazivi i struktura mapa, potvrdni okviri i druge postavke poštanskog sandučića na Gmailu ostat će isti kao u velikoj verziji Gmaila. Osim toga, u aplikaciji možete pojedinačno konfigurirati svaki od računa: postaviti potpis, omogućiti ili onemogućiti prikaz ikona, konfigurirati sustav push obavijesti.


Push obavijesti. Napredne push obavijesti zaslužuju poseban spomen. Prvo (i to je jedan od glavnih bonusa aplikacije), mogu se omogućiti čak i za račune na onim servisima koji ne mogu slati push poruke.

Drugo, mogu se konfigurirati točno onako kako želite, detaljno navodeći u koje vrijeme dolaze i što treba prijaviti. Moguće je označiti primatelje po imenu, poruke od kojih ste spremni čitati dan i noć (na primjer, pisma vaše majke), ili strogo od 9 do 19:00 (najvjerojatnije će to biti pisma klijenata ili kolega ). Možete uključiti ili isključiti upozorenja za određene račune, mape ili primatelje.

Programeri su pažljivo osigurali gumb koji vam omogućuje da odmah isključite obavijesti o pošti s društvenih mreža ili usluga kupona. Sadržaj push obavijesti također je postavljen: možda želite sakriti ime primatelja ili predmet pisma iz razloga privatnosti.

Brzo djelovanje. Za praktičan rad sa slovima u aplikaciji postoji izbornik brzih radnji. Za pozivanje ovih čarobnih gumba potrebno je samo prijeći s desna na lijevo na željenoj poruci na popisu slova. Uz njihovu pomoć možete izbrisati pismo, označiti okvir, premjestiti ga u drugu mapu, poslati u neželjenu poštu itd. Sve radnje izvode se jednim klikom.

Avatari primatelja i usluga pomoći će vam u navigaciji u pošti. Vidljivi su na popisu pisama, prilikom čitanja i pisanja pisama te, kao što je već spomenuto, u push obavijestima. Prilikom čitanja i pisanja pisma, korisnik vidi avatar pošiljatelja ili primatelja, kao i pregled privitaka. Ako su priložene fotografije ili crteži, prikazuju se minijature slika. Usput, priloge možete pogledati bez napuštanja blagajne, tj. upravo u aplikaciji.

predmemoriranje. Caching će vam dobro doći na mjestima gdje internet nije baš dobar, na primjer, u podzemnoj željeznici. Vlasnik pametnog telefona s klijentom pošte Mail.Ru moći će čitati tekstove i pregledavati fotografije čak i bez mreže.

Savjeti. Aplikacija predlaže željenu e-poštu, vrijedi unijeti prva slova u adresnu traku (pod uvjetom da ste ovom primatelju pisali barem jednom - nije bitno je li u glavnoj verziji Mail-a ili u aplikaciji) . Osim toga, klijent će na Vaš zahtjev dodati kontakte s telefona na listu ispitanika.

Budimo objektivni - aplikacija za poštu Mail.Ru napravljena je da traje. A ako ste prije koristili otmjene pushove, uživajte u avatarima na popisu slova itd. bilo moguće samo ako postoji poštanski sandučić na Mail.Ru, sada će korisnici istog Mail.Rua moći prikupljati druge poštanske sandučiće u aplikaciji (a oni koji preferiraju druge usluge, barem testiraju klijenta).

Nastavljam seriju članaka o funkciji prikupljanja pošte u jedan glavni pretinac e-pošte od bilo kojeg drugog koji se nalazi na bilo kojem poštanskom servisu. U prošlom smo članku govorili o postavljanju prikupljanja pošte na servisu Yandex, što je jednostavno kao guljenje krušaka. A u ovom ću članku govoriti o tome kako učiniti isto u drugoj usluzi koja danas nije manje popularna - Mail.ru, gdje mnogi još uvijek drže svoj glavni pretinac e-pošte, unatoč činjenici da, na primjer, usluga GMail ima jasne prednosti (opisano je o postavljanju prikupljanja pošte u Gmailu). Ali kako se kaže, svakome svoje, a ponekad je to samo stvar navike :)

Postavljanje prikupljanja pošte u usluzi Mail.ru jednostavno je kao, na primjer, na Yandexu. Samo nekoliko jednostavnih koraka i sve će biti spremno, pošta će početi teći iz poštanskih sandučića koje ste povezali s jednim, na Mailu.

Proces postavljanja prikupljanja pošte u usluzi Mail.ru

Prije svega, prijavite se na svoj Mail račun, gdje ćete prikupljati poštu iz drugih e-mail sandučića i otvorite odjeljak “Pisma” (tamo se nalazi pošta).

Sada morate ići na postavke pošte. Da biste to učinili, kliknite gumb "Više" na vrhu i odaberite "Postavke".

Postavke možete otvoriti i klikom na svoju adresu e-pošte u gornjem desnom kutu i zatim odabirom “Postavke pošte”.

Zatim idite na odjeljak "Pošta iz drugih poštanskih sandučića".

Otvorit će se prvi prozor za povezivanje drugog e-mail pretinca.

Podsjećam da se drugi e-mail sandučić iz kojeg želite prikupljati pisma može nalaziti na bilo kojem servisu, ne samo na Mailu!

U primjeru za ovaj članak razmotrit ćemo povezivanje poštanskog sandučića koji se nalazi na Yandex.

U ovom prozoru morate navesti korisničko ime i lozinku za poštu koju spajate. Ako se pretinac koji povezujete nalazi na jednom od dolje navedenih servisa, zatim kliknite odgovarajući gumb na vrhu, unesite punu adresu povezane pošte ispod i kliknite "Dodaj pretinac":

Ukoliko se kutija koju želite spojiti nalazi na nekom drugom servisu (nije s gornjeg popisa), tada na vrhu kliknite gumb “Other mail” nakon čega je potrebno unijeti punu adresu povezanog maila, lozinku iz njega i kliknite "Dodaj okvir".

Ako se još niste prijavili u ovaj preglednik u svojoj drugoj pošti koju povezujete, tada ćete u sljedećem prozoru morati unijeti svoju prijavu i lozinku iz njega. Primjer:

Nakon toga kliknite "Dopusti" (dopuštate pošti na Mail.ru da koristi neke podatke povezane druge pošte).

Ako je sve prošlo kako treba, dobit ćete poruku da je sakupljač dodan. Sada morate odabrati u koju ćete mapu prikupljati poštu: u posebno stvorenu mapu prema nazivu pošte koju ste povezali ili u ulaznu poštu. Na vama je, ali, po mom mišljenju, prikladnije je kada pošta prikupljena iz drugog poštanskog sandučića ide u zasebnu mapu. Na ovaj ili onaj način, tada se može konfigurirati filtriranjem poruka.

Opcija “Primijeni filtre na primljene poruke” znači da će se svi filtri koje ste već konfigurirali u svom glavnom mail to Mail također primijeniti na mail primljen iz povezanog poštanskog sandučića. Onemogućiti ili ne - odlučite.

To je to, sakupljač pošte je postavljen! Sada, u roku od nekoliko minuta (ponekad se proces odgađa ako postoji mnogo pisama u povezanoj pošti), pošta iz drugog poštanskog sandučića će početi teći u vaš glavni.

Na taj se način možete povezati i prikupiti onoliko mailova koliko želite.

Kako zasebno vidjeti sva pisma iz povezane pošte?

Pisma možete vidjeti zasebno ako ste prilikom postavljanja prikupljanja pošte u aplikaciji Mail naveli da se pisma trebaju prikupljati u zasebnoj mapi s nazivom povezanog poštanskog sandučića. U tom slučaju otvorite ovu mapu i vidjet ćete sva potrebna slova. Primjer:

Ako niste odmah postavili prijem pisama u zasebnoj mapi, možete ga postaviti u bilo kojem trenutku otvaranjem stvorenog kolektora (više o tome u nastavku).

Konfiguriranje stvorenog sakupljača pošte, njegovo onemogućavanje i omogućavanje

Ponekad ćete možda trebati promijeniti postavke sakupljača pošte koji ste stvorili u aplikaciji Mail, kao i isključiti ga ili ponovno uključiti.

To se može učiniti na istom mjestu u odjeljku "Postavke" - "Pošta iz drugih poštanskih sandučića", gdje ste izvorno kreirali sakupljač pošte.

Ovdje ćete vidjeti kreirani kolektor. Ako ga želite isključiti ili ponovno uključiti, kliknite na odgovarajući prekidač. Ako trebate otvoriti postavke kolektora, kliknite "Uredi".

I otvorit će se iste postavke za sakupljač pošte kao u fazi njegovog stvaranja (vidi).

U ovom ćemo članku govoriti o tome što su "pošta iz drugih sandučića" i "prikupljanje pisama s drugih računa". Recenzije i usporedbe usluga e-pošte.

Kako se funkcionalnost mail servisa ažurira, novosti ćemo objaviti na kraju ovog članka.

Mail.ru servis za poštu, Yandex i Google tražilice već nekoliko godina nude vrlo korisnu i potrebnu funkcionalnost koja vam omogućuje kombiniranje svih ostalih računa e-pošte u jednu poštu. Drugim riječima, vrijedi jednom dodati i konfigurirati sve svoje "mailove" i postat će moguće upravljati njima u jednom prozoru bez stalnog unosa prijave i lozinke.

Usluge pošte nude nam veliko mjesto za pohranjivanje svih dolaznih pisama, korisničko sučelje, dobru funkcionalnost upravljanja i još mnogo toga. Za testiranje mogućnosti navedenih mail servisa izdvojit ćemo tri parametra za ocjenu njihova rada: 1) potrebno je upravljati različitim e-mail računima, uključujući one s raznih servisa i stranica, preko jednog mail klijenta; 2) imati svojeručni potpis i ime za svaku poštu; 3) izbrišite poruke s poslužitelja onih računa pošte koji su dodani u mail, yandex ili google mail.

Naš zadatak izgleda ovako:

Pa krenimo. Prvi smo testirali uslugu Mail.ru, koja nam kaže: “Možete skupljati poštu iz svih svojih poštanskih sandučića u jedan poštanski sandučić na Mail.ru.

Postavite prikupljanje e-pošte s bilo kojeg poslužitelja koji koristi IMAP ili POP3 protokol. Da biste dodali vanjsku poštu osim @mail, @inbox, @list, @bk, morate imati barem jednu poštu koja već postoji na navedenim poslužiteljima iz pošte. Drugim riječima, prvo registrirajte mail-mail, a zatim dodajte druge mail račune. Proces registracije za mail je jednostavan, nema smisla opisivati ​​ga, ali ćemo opisati dodavanje drugih e-mailova na ovaj mail račun.

Zatim će se od vas tražiti da unesete prijavu i lozinku za bilo koji poštanski sandučić koji koristite, au roku od 3-5 minuta "Sakupljač pošte iz pošte" će stvoriti mapu s nazivom dodane pošte pored "pristigle pošte" , “poslano”, “spam” i ostalo.

Zapravo, sakupljač pošte će raditi u roku od 10-15 minuta i dodati će sva slova u novostvorenu mapu iz okvira koji ste naveli. Sva dolazna pisma za novi e-mail bit će poslana u ovu mapu, također će biti moguće slati pisma iz priloženog sandučića. Prilikom kreiranja novog pisma pojavit će se polje "Od" u kojem možete odabrati iz kojeg sandučića će pismo biti poslano.

Prednosti usluge pošte Mail.ru uključuju jednostavnost dodavanja i jednostavnost postavljanja drugih poštanskih sandučića, nema potrebe za navođenjem raznih protokola (POP3, SMTP). Ovo je vrlo važno jer ne zna svaki korisnik što je to.

Nedostaci Mail.ru su u tome što je nemoguće dodijeliti ime i potpis za svaki novododani mail (bilo koji novi e-mail osim glavnog), odnosno ime i potpis glavnog maila bit će distribuirani svaka adresa i to je to. Još jedan veliki nedostatak je taj što prilikom učitavanja e-pošte u mail ne postoji način da se izvorna e-pošta automatski izbriše s priloženog poslužitelja poštanskog sandučića. Zašto je toliko važno brisati poruke s poslužitelja dodanog poštanskog sandučića? Time ćete izbjeći ispunjavanje priloženog maila, jer. Vanjski računi e-pošte obično su premali za pohranu e-pošte. Na primjer, ako je prostor za poštu na vanjskom računu pun, Mail.ru neće prikazati nijednu novu poruku sve dok ne uđete u sučelje za vanjsku poštu i izravno izbrišete poruke iz njega kako biste oslobodili prostor. Osim toga, vezujemo poštu za Mail u nadi da ćemo dobiti puno prostora za pohranu naše pošte, koji može biti ograničen resursima hostinga. Dakle, unatoč činjenici da Mail.ru nudi gotovo neograničenu veličinu poštanskog sandučića, kada dodajete poštu iz druge zone domene (npr. [e-mail zaštićen]), vaši dodani resursi e-pošte neće se povećati u Mail.ru, ali će i dalje biti ograničeni resursima hostinga (u našem slučaju resursi primer.ru).

Mogućnost dodavanja druge pošte u uslugu Mail nije zadovoljila naš zadatak u dva boda od tri, ukupno je dobila jedan bod.

Istina, Mail.ru ima još jedan način za dodavanje vanjske pošte, točnije, povezivanje ili prijava na vanjsku poštu. Ovako izgleda:

Ova metoda nije prikladna za naš zadatak, jer ovo nije skupljač pošte, već korisnički način rada koji se povezuje s poštom i svaki put učitava sve mape i pisma u sučelje pošte. Ali ovdje je moguće dodati osobni potpis i ime za svaki mail, moguće je slati pisma s konfiguriranog maila. Brisanje e-pošte iz preuzetih poštanskih sandučića ne funkcionira. nije sakupljač pošte.

Važno! Neki korisnici pogrešno misle da ako su slova prikazana u pošti, tada se pošta iz koje je došlo do preuzimanja može izbrisati. Još jednom obratimo pozornost da Mail.ru radi kao preglednik pošte, a ako obrišete poštu, ona će biti izbrisana iu glavnom poštanskom sandučiću iu pošti.

Drugi subjekt Yandex sa svojim sakupljačem pisama. Zadaci su slični: prikupiti poštu, dodijeliti potpis i ime svakoj pošti te izbrisati svu poštu iz dodanog sandučića.

Yandexov sakupljač pošte konfiguriran je na sličan način, ali ako je pošta povezana s neke web-lokacije, na primjer site.ru, tada će trebati odrediti dodatne postavke, pogledajte snimak zaslona.

Usluga pošte obavila je ovaj posao umjesto nas, dok Yandex nudi ručno postavljanje svih postavki iz pošte treće strane. Ovdje nema ništa komplicirano: u polje za prijavu unesite puno ime pošte ( [e-mail zaštićen]), u polje poslužitelj unesite samo domenu (site.ru), sve ostale postavke bolje je ostaviti zadane ili ih promijeniti ako znate što radite. Nakon uspješnog dodavanja pošte pojavit će se natpis:

Za razliku od skupljača pošte, Yandex nudi odabir hoće li se izvorna pisma spremiti u dodani poštanski sandučić ili ne. U svim ostalim aspektima, Yandexov sakupljač pisama radi na sličan način kao i Mail.ru, moguće je odabrati poštanski sandučić iz kojeg želite poslati pismo. Ali Yandex ima isti problem s potpisivanjem pisama: ne postoji način za postavljanje pojedinačnog imena i potpisa za svaki dodani poštanski sandučić.

Sudeći po navigaciji, moguće je dodati pojedinačni potpis za svaki sandučić, ali u stvarnosti to ne radi. Odaberemo poštu, propisujemo ime i potpis, kliknemo Spremi. To je to, potpis je spremljen i radi, ali se čuva i za sve ostale sandučiće, odnosno dodjeljivanjem imena i potpisa jednom sandučiću automatski mijenjate te postavke u svim mailovima objedinjenim u Yandexu. Čak i ako je odabran bilo koji drugi okvir, potpis će sada svugdje biti isti.

Ukupno, Yandex se uspješno nosio s prikupljanjem i sortiranjem pošte, može izbrisati originalna pisma iz dodanog poštanskog sandučića, ali ne može raditi s potpisima! Yandex sakupljač e-pošte nije se uspio nositi s našim zadatkom i postiže dva boda od tri.

Htio bih napomenuti da se, nakon “čeprkanja” po sva tri servisa za sklapanje pošte, čini da je Mail na brzinu “prokockao” svoju funkcionalnost. Iako će zadovoljiti većinu korisnika, ali, da budemo iskreni, Mail je napravio sakupljač pošte za pokazivanje, kako bi bio zapažen u natjecateljskoj utrci. Sve radi dobro i bez kvarova, ali asembler iz Mail-a nije se nosio s našim zadatkom. Postoji nekoliko oglasnih blokova u sučelju pošte, ali oni ne ometaju rad s pismima.

Što se tiče Yandexa, koji je davno stvorio sakupljač e-pošte, čini se da ova industrija nije podržana, jer popravljanje tako jednostavne funkcionalnosti (mogućnost dodavanja više potpisa za poštanske sandučiće) ne bi trebalo biti teško za tako moćnu pretragu motor. Međutim, Yandex ima još jednu jedinstvenu funkcionalnost koja vam omogućuje vezanje domena na njihove dns poslužitelje, a kasnije stvaranje i konfiguriranje pošte. Ali takve operacije i postavke zahtijevaju znanje i vrijeme. I iako tu nema ništa komplicirano, u svakom slučaju, ovo nije za većinu korisnika Runeta. Velika prednost- nema oglasa u sučelju pošte Yandex! Minus— ograničenje u sakupljaču pošte za 10 poštanskih sandučića.

Finalist i pobjednik je Googleov kolekcionar e-pošte, koji se s našim zadatkom, unatoč tome, odlično nosio Ograničenje od 5 kutija

Naravno, sve mora biti paralelno. Ovo je mjesto gdje moja omiljena biblioteka TPL DataFlow stupa na scenu.

Poštu ćemo preuzeti putem POP3. Sve "modne stvari" IMAP-a u ovom su zadatku suvišne - potrebno je što brže i jednostavnije uzeti izvor pisma i izbrisati ga na poslužitelju. POP3 je dovoljan za oči. Koristimo OpenPop.NET.

Kao dodatni dodatak, Zabbixu ćemo dodati praćenje. (Radit ćemo 24/7 i davati hvaljenu brzinu - morate se pridržavati ovoga).

Ići

Izrađujemo normalnu konzolnu aplikaciju. Otvorite NuGet konzolu i instalirajte sve potrebne pakete:

Instalacijski paket Nlog Instalacijski paket OpenPop.NET Instalacijski paket TopShelf Instalacijski paket Microsoft.TPL.DataFlow
Idite u mapu projekta, kreirajte App.Debug.config i App.Release.config. Iskrcavamo projekt iz studija, otvaramo njegov kod (u daljnjem tekstu TopCrawler.csproj). Dodajte u odjeljak konfiguracije:

Konfiguracije

app.config app.config


Ispod je prilagođeni cilj za MSBuild:

Transformirajte cilj

$(TargetFileName).config


Osobno sam navikao na ovaj način - na starinski način - dodati transformaciju konfiguracija u odvojena okruženja.
Radi praktičnosti, predlažem konfiguracije sa strogim tipom. Posebna klasa će čitati konfiguraciju. (O teoretskim aspektima takve odluke možete govoriti u komentarima). Konfiguracije, zapisnici, nadzor - izvrstan razlog za implementaciju Singleton uzorka.

Napravite mapu istog naziva u projektu (mora postojati red). Unutra stvaramo 3 klase - Config, Logger, Zabbix. Naš loger:

drvosječa

static class Logger ( public static NLog.Logger Log ( get; private set; ) public static NLog.Logger Archive ( get; private set; ) static Logger() ( Log = LogManager.GetLogger("Global"); Archive = LogManager. GetLogger("Arhivator"); ) )


Praćenje sa Zabbixom zaslužuje zasebnu objavu, tako da ću ostaviti klasu koja implementira agenta ovdje:

Zabbix

imenski prostor TopCrawler.Singleton( ///

/// Singleton: zabbix klasa pošiljatelja /// static class Zabbix ( public static ZabbixSender Sender ( get; private set; ) static Zabbix() ( Sender = new ZabbixSender(Config.ZabbixServer, Config.ZabbixPort); ) ) struct ZabbixItem ( public string Host; public string Key; public string Value ; ) klasa ZabbixSender ( interna struktura SendItem ( // ReSharper onemogući InconsistentNaming - Zabbix je host javnog niza osjetljiv na velika i mala slova; javni ključ niza; javna vrijednost niza; javni sat niza; // ReSharper obnovi InconsistentNaming ) #pragma upozorenje onemogući 0649 interna struktura ZabbixResponse (javni niz Odgovor; javni niz Informacije;) #pragma upozorenje vraćanje 0649 #region --- Konstante --- javni konst niz DefaultHeader = "ZBXD\x01"; javni konst string SendRequest = "podaci pošiljatelja"; javni konst int DefaultTimeout = 10000 ;#endregion #region --- Polja --- privatno samo za čitanje DateTime _dtUnixMinTime = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc); privatno samo za čitanje int _timeout; privatni niz samo za čitanje _zabbixserver; privatno samo za čitanje int _zabbixport; #endregion #region --- Konstruktori --- public ZabbixSender(string zabbixserver, int zabbixport) : this(zabbixserver, zabbixport, DefaultTimeout) ( ) public ZabbixSender(string zabbixserver, int zabbixport, int timeout) ( _zabbixserver = zabbixserver; _zabbixport = zabbixport; _timeout = timeout; ) #endregion #region --- Metode --- javni niz SendData(ZabbixItem itm) ( return SendData(new List) (1) (stavka )); ) javni niz SendData(List lstData) ( pokušaj ( var serijalizer = novi JavaScriptSerializer(); var vrijednosti = novi popis (lstData.Count); values.AddRange(lstData.Select(itm => new SendItem ( host = itm.Host, key = itm.Key, value = itm.Value, clock = Math.Floor((DateTime.Now.ToUniversalTime() - _dtUnixMinTime). TotalSeconds).ToString(CultureInfo.InvariantCulture) ))); var json = serijalizer.Serialize(novo ( zahtjev = SendRequest, podaci = vrijednosti.ToArray() )); var zaglavlje = Encoding.ASCII.GetBytes(DefaultHeader); var length = BitConverter.GetBytes((long)json.Length); var data = Encoding.ASCII.GetBytes(json); var paket = novi bajt; Buffer.BlockCopy(zaglavlje, 0, paket, 0, zaglavlje.Duljina); Buffer.BlockCopy(duljina, 0, paket, zaglavlje.Duljina, duljina.Duljina); Buffer.BlockCopy(data, 0, packet, header.Length + length.Length, data.Length); koristeći (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) ( socket.Connect(_zabbixserver, _zabbixport); socket.Send(packet); //Header var buffer = new byte; ReceivData(socket , buffer, 0, buffer.Length, _timeout); if (DefaultHeader != Encoding.ASCII.GetString(buffer, 0, buffer.Length)) throw new Exception("Invalid header"); //Buffer duljine poruke = novi bajt ; ReceivData(socket, buffer, 0, buffer.Length, _timeout); var dataLength = BitConverter.ToInt32(buffer, 0); if (dataLength == 0) throw new Exception("Invalid data length"); //Meuspremnik poruka = novi bajt; ReceivData(socket, buffer, 0, buffer.Length, _timeout); var response = serializator.Deserialize (Encoding.ASCII.GetString(buffer, 0, buffer.Length)); return string.Format("Odgovor: (0), Info: (1)", odgovor.Odgovor, odgovor.Informacije); ) ) catch (Iznimka e) ( return string.Format("Exception: (0)", e); ) ) private static void ReceivData(Socket pObjSocket, byte buffer, int offset, int size, int timeout) ( var startTickCount = Environment.TickCount; var accepted = 0; do ( if (Environment.TickCount > startTickCount + timeout) throw new TimeoutException(); try ( accepted += pObjSocket.Receive(buffer, offset + primljeno, veličina - primljeno, SocketFlags.None) ; ) catch (SocketException ex) ( if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) Thread.Sleep(30); else throw; ) ) dok (primljeno< size); } #endregion } }


Konfiguracije… Vrijeme je da učinimo barem nešto zanimljivo. Prvo, u konfiguracijama ćemo pohraniti okvire koje ispitujemo. Drugo, postavke DataFlow-a. Predlažem ovako:

konfiguracije



Dakle, host i port na koji se povezuje, korisnik i lozinka - ovdje je sve jasno. Sljedeća je vrsta kutije. Recimo da uslugu koristi marketing (kao i drugi odjeli). Imaju poštanske sandučiće u koje padaju automatski odgovori na mailing liste, kao i FBL izvješća o neželjenoj pošti. Sam okvir već kategorizira pismo, pa za takve situacije odmah postavljamo tip sanduka. S postavkama DataFlowa bit će jasno dalje kada počnemo stvarati objekte. Ovdje ćemo imati vlastite odjeljke u konfiguraciji. Postoji hrpa priručnika o tome kako to učiniti, pa ću samo pokazati rezultat:

Definiranje tipova

#region --- Vrste --- statička klasa MailboxType ( public const string Bo = "bo"; public const string Crm = "crm"; public const string Fbl = "fbl"; public const string Bounce = "bounce"; ) class MailboxInfo ( javni niz Tip ( get; set; ) javni niz Hostname ( get; set; ) javni niz Korisnik ( get; set; ) javni niz Password ( get; set; ) javni int Port ( get; set; ) ) klasa DataBlockOptions ( public int Maxdop ( get; set; ) public int BoundedCapacity ( get; set; ) public DataBlockOptions() ( Maxdop = 1; BoundedCapacity = 1; ) ) #endregion


Stvaranje odjeljaka

///

/// Odjeljak prilagođene konfiguracije /// javna klasa CustomSettingsConfigSection: ConfigurationSection ( public CredentialsCollection CredentialItems ( get ( return base["CredentialsList"] as CredentialsCollection; ) ) public DataBlockOptionsCollection DataFlowOptionsItems ( get ( return base["DataFlowOptionsList"] as DataBlockOptionsCollection; ) ) )


///

/// Prilagođena zbirka - popis vjerodajnica /// javna klasa CredentialsCollection: ConfigurationElementCollection, IEnumerable ( protected override ConfigurationElement CreateNewElement() ( return new CredentialsElement(); ) protected override object GetElementKey(ConfigurationElement element) ( return ((CredentialsElement)element).Username; ) public CredentialsElement this ( get ( return BaseGet(index) as CredentialsElement; ) ) javni novi IEnumerator < Count; i++) { yield return BaseGet(i) as CredentialsElement; } } } /// /// Prilagođena stavka vjerodajnica /// public class CredentialsElement: ConfigurationElement ( public string Hostname ( get ( return base["hostname"] as string; ) ) public string Username ( get ( return base["username"] as string; ) ) public string Password ( get ( return base ["lozinka"] kao niz; ) ) javni niz Tip ( get ( return base["type"] as string; ) ) public string Port ( get ( return base["port"] as string; ) ) ) /// /// Prilagođena zbirka - popis opcija DataBlock /// javna klasa DataBlockOptionsCollection: ConfigurationElementCollection, IEnumerable ( protected override ConfigurationElement CreateNewElement() ( return new DataBlockOptionsElement(); ) protected override object GetElementKey(ConfigurationElement element) ( return ((DataBlockOptionsElement)element).Name; ) public CredentialsElement this ( get ( return BaseGet(index) as CredentialsElement; ) ) javni novi IEnumerator GetEnumerator() ( for (var i = 0; i< Count; i++) { yield return BaseGet(i) as DataBlockOptionsElement; } } } /// /// Stavka opcija Custom DataBlock /// public class DataBlockOptionsElement: ConfigurationElement ( public string Name ( get ( return base["name"] as string; ) ) public string Maxdop ( get ( return base["maxdop"] as string;) ) public string BoundedCapacity ( get ( return base ["boundedcapacity"] kao niz; ) ) )


Neću pisati punu implementaciju konfiguracije, podrazumijeva se da će tijekom procesa razvoja tamo biti dodani parametri koji su nam potrebni.

Naše prilagođene postavke čitamo ovako:

Čitanje

javni popis CredentialsList ( dobiti; privatni skup; ) javni rječnik DataFlowOptionsList ( get; private set; ) ... static Config() ( try ( var customConfig = (CustomSettingsConfigSection)ConfigurationManager.GetSection("CustomSettings"); //Dohvati poštanske sandučiće za svakog (var stavka u customConfig.CredentialItems) CredentialsList.Add( new MailboxInfo ( Hostname = item.Hostname, Port = Convert.ToInt32(item.Port), User = item.Username, Type = item.Type, Password = item.Password )); //Dohvati DataFlow postavke za svakog (var item in customConfig.DataFlowOptionsItems) DataFlowOptionsList.Add(item.Name, new DataBlockOptions ( Maxdop = Convert.ToInt32(item.Maxdop), BoundedCapacity = Convert.ToInt32(item.BoundedCapacity) )); ) catch (Exception ex) ( Logger.Log. Fatal("Pogreška pri čitanju konfiguracije: (0)", ex.Message); throw; ) )


Nekako ispadne jako dugo, a nismo ni stigli do najzanimljivijeg dijela.

Izostavimo za sada vezanje s TopShelf-a, brojače performansi, komunikaciju s bazom i bacimo se na posao! Mi stvaramo Crawler klasu - jezgru. Počnimo s čitanjem pošte:

Privatni volatile bool _stopPipeline; ... public void Start() ( do ( var getMailsTasks = _config.CredentialsList.Select(credentials => Task.Run(() => GetMails(credentials))).ToList(); foreach (var task in getMailsTasks) zadatak .Wait(); Thread.Sleep(2000); ) while (!_stopPipeline); //Zaustavi cjevovod - čekaj završetak svih krajnjih točaka //Cjevovod DataFlow zaustavit će se ovdje ako (_stopPipeline) Logger.Log.Warn("Cjevovod ima zaustavio korisnik"); )
Ovdje je lijenost uzela svoj danak i odlučio sam se ne truditi - ako ima oko 20-30 kutija, možete pokrenuti zadatak za svaku i ne brinuti o broju niti. (Dopuštam vam da bacate rajčice.)

Prijeđimo na čitanje:

Private void GetMails(MailboxInfo info) ( pokušajte ( koristeći (var client = new Pop3Client()) (
Odmah izračunajmo vrijeme pristupa kutiji - to će biti korisno za dijagnosticiranje mreže i opterećenja poslužitelja.

//Dohvati Zabbix metriku var stopwatch = new Štoperica(); štoperica.Start(); //Dohvati broj pošte client.Connect(info.Hostname, info.Port, false); client.Authenticate(info.User, info.Password); štoperica.Stop();
Slanje podataka na Zabbix. Sve je jednostavno - navodimo ime hosta (kao što je u Zabbixu), ključ (opet, strogo, kao u Zabbixu) i vrijednost niza.

//Pošalji na Zabbix Zabbix.Sender.SendData(new ZabbixItem ( Host = Config.HostKey, Key = info.Type + Config.TimingKey, Value = stopwatch.ElapsedMilliseconds.ToString() )); Logger.Log.Debug("Pošalji [(0)] vrijeme u Zabbix: spojen na "(1)" kao "(2)", vrijeme (3)ms", info.Type, info.Hostname, info.User, štoperica.ElapsedMilliseconds); varcount = client.GetMessageCount(); if (count == 0) return; Logger.Log.Debug("Imamo novih (0) poruka u "(1)"", count, info.User); //Pošalji poruke bloku za sortiranje za (var i = 0; i< count; i++) { try { var mailInfo = new MessageInfo { IsSpam = false, Mail = client.GetMessage(i + 1), Type = MessageType.UNKNOWN, Subtype = null, Recipient = null, Mailbox = info }; Logger.Log.Debug("Download message from "{0}". Size: {1}b", info.User, mailInfo.Mail.RawMessage.Length);
Cjevovod DataFlow bit će stvoren kada se stvori klasa Crawler. Smatramo da je naša prva faza sortiranje pisma.

Dok (!_sortMailDataBlock.Post(mailInfo)) Thread.Sleep(500);
Vidite kako je jednostavno - pokretna traka je jedna. Svi zadaci koji čitaju poštu tamo bacaju poruke jednu po jednu. Ako je blok zauzet, Post će vratiti false i samo ćemo pričekati dok se ne oslobodi. Struja tada u ovom trenutku nastavlja s radom. To je ono što ja zovem paralelizmom bez brige.

Poruka je otišla na pokretnu traku, sada se može mirno spremiti u RAW arhivu (da, sve što smo pročitali sprema se u arhivu datoteka. Služba za podršku će nam kasnije zahvaliti).

Postavimo, na primjer, rotaciju arhive:

Nlog.config



Zatim možete postaviti logStash na to, ali to je druga priča ...

//Spremi svaku poštu u arhivu Logger.Log.Debug("Arhiviraj poruku"); Logger.Archive.Info(Functions.MessageToString(mailInfo.Mail)); ) catch (Exception ex) ( Logger.Log.Error("Parse email error: (0)", ex.Message); Functions.ErrorsCounters.Increment(); //Svejedno arhiviraj poštu Logger.Log.Debug("Arhiviraj poruku "); Logger.Archive.Info(Encoding.Default.GetString(client.GetMessageAsBytes(i + 1))); ) if (_config.DeleteMail) client.DeleteMessage(i + 1); if (_stopPipeline) break; ) Logger.Log.Debug("Gotovo s "(0)"", info.User); ) ) catch (Iznimka ex) ( Logger.Log.Error("Opća pogreška - tip: (0), poruka: (1)", ex, ex.Message); Functions.ErrorsCounters.Increment(); ) )
Ovdje smo koristili statičke brojače grešaka (po vrsti okvira), gdje je ErrorsCounters:

Javni statički rječnik ErrorsCounters = novi rječnik ();
A sami brojači mogu se napraviti ovako:

Brojač.cs

class Counter ( private long _counter; public Counter() ( _counter = 0; ) public void Increment() ( Interlocked.Increment(ref _counter); ) public long Read() ( return _counter; ) public long Refresh() ( return Interlocked .Exchange(ref _counter, 0); ) public void Add(long value) ( ​​​​Interlocked.Add(ref _counter, value); ) public void Set(long value) ( ​​​​Interlocked.Exchange(ref _counter, value) ;))


Prijeđimo na stvaranje cjevovoda. Recimo da imamo okvire u koje se ulijevaju automatski odgovori. Takva pisma potrebno je analizirati (kakav automatski odgovor, od koga, s koje mailing liste itd.) i dodati rezultat u pohranu (DB). Recimo, postoje kutije u koje padaju izvještaji FBL-a. Takva pisma odmah dodajemo u bazu podataka. Sva ostala pisma smatraju se "korisnim" - treba ih provjeriti za neželjenu poštu i poslati u vanjski sustav, na primjer, CRM.

Kao što ste već shvatili, ovaj primjer uglavnom razmatra korištenje kolektora za marketinške zadatke - prikupljanje statistike o isporuci pošte, informacije o neželjenoj pošti.

Dakle, odlučili smo se za tijek rada. Deklariramo potrebne blokove u klasi Crawler:

Class MessageInfo ( public bool IsSpam ( get; set; ) public Message Mail ( get; set; ) public string Subtype ( get; set; ) public string Recipient ( get; set; ) public MessageType Type ( get; set; ) public MailboxInfo Poštanski sandučić ( get; set; ) ) class Crawler ( //Pipeline private TransformBlock _sortMailDataBlock; privatni TransformBlock _spamFilterDataBlock; privatni TransformBlock _checkBounceDataBlock; privatni TransformBlock _identifyDataBlock; privatni ActionBlock _addToCrmDataBlock; privatni ActionBlock _addToFblDataBlock; privatni ActionBlock _addToBounceDataBlock; ...
Stvaramo metodu inicijalizacije i stvaramo blokove cjevovoda (koristimo naše prekrasne odjeljke iz konfiguracija za inicijalizaciju blokova):

Public void Init() ( //*** Stvori cjevovod *** //Stvori TransformBlock da dobiješ vrstu poruke var blockOptions = _config.GetDataBlockOptions("_sortMailDataBlock"); _sortMailDataBlock = new TransformBlock (mail => SortMail(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite TransformBlock za filtriranje spama blockOptions = _config.GetDataBlockOptions("_spamFilterDataBlock"); _spamFilterDataBlock = novi TransformBlock (mail => FilterSpam(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite TransformBlock za sortiranje odbijanja blockOptions = _config.GetDataBlockOptions("_checkBounceDataBlock"); _checkBounceDataBlock = novi TransformBlock (mail => BounceTypeCheck(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite TransformBlock za identifikaciju vlasnika odbijanja blockOptions = _config.GetDataBlockOptions("_identifyDataBlock"); _identifyDataBlock = novi TransformBlock (mail => GetRecipient(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite ActionBlock za slanje pošte u CRM blockOptions = _config.GetDataBlockOptions("_addToCrmDataBlock"); _addToCrmDataBlock = novi ActionBlock (mail => AddToCrm(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite ActionBlock za slanje FBL-a na MailWH blockOptions = _config.GetDataBlockOptions("_addToFblDataBlock"); _addToFblDataBlock = novi ActionBlock (mail => AddToFbl(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Stvorite ActionBlock za slanje odbijanja na MailWH blockOptions = _config.GetDataBlockOptions("_addToBounceDataBlock"); _addToBounceDataBlock = novi ActionBlock (mail => AddToBounce(mail), new ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity ));
Sastavljamo transporter prema našoj shemi:

//*** Izgradnja cjevovoda *** _sortMailDataBlock.LinkTo(_spamFilterDataBlock, info => info.Type == MessageType.GENERAL); _sortMailDataBlock.LinkTo(_addToFblDataBlock, info => info.Type == MessageType.FBL); _sortMailDataBlock.LinkTo(_checkBounceDataBlock, info => info.Type == MessageType.BOUNCE); _sortMailDataBlock.LinkTo(DataflowBlock.NullTarget (), info => info.Type == MessageType.UNKNOWN); /*STUB*/ _checkBounceDataBlock.LinkTo(_identifyDataBlock); _identifyDataBlock.LinkTo(_addToBounceDataBlock); _spamFilterDataBlock.LinkTo(_addToCrmDataBlock, info => !info.IsSpam); _spamFilterDataBlock.LinkTo(DataflowBlock.NullTarget (), info => info.IsSpam); /*STUB*/
Kao što vidite, sve je vrlo jednostavno - povezujemo blok sa sljedećim (uz mogućnost postavljanja uvjeta povezivanja). Svi blokovi se izvode paralelno. Svaki blok ima stupanj paralelizma i kapaciteta (uz pomoć kapaciteta možete regulirati red prije bloka, odnosno blok je primio poruku, ali je još ne obrađuje). Dakle, moguće je postaviti visok stupanj paralelizma za "složene" i duge operacije, kao što je parsiranje sadržaja e-pošte.

Neću opisivati ​​DataFlow hardver, bolje je pročitati sve u izvornom TPL DataFlow izvoru.

SortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_spamFilterDataBlock).Fault(t.Exception); else _spamFilterDataBlock.Complete(); )); _sortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToFblDataBlock).Fault(t.Exception); else _addToFblDataBlock.Complete(); )); _sortMailDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_checkBounceDataBlock).Fault(t.Exception); else _checkBounceDataBlock.Complete(); )); _spamFilterDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToCrmDataBlock).Fault(t.Exception); else _addToCrmDataBlock.Complete(); )); _checkBounceDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_identifyDataBlock).Fault(t.Exception); else _identifyDataBlock.Complete(); )); _identifyDataBlock.Completion.ContinueWith(t => ( if (t.IsFaulted) ((IDataflowBlock)_addToBounceDataBlock).Fault(t.Exception); else _addToBounceDataBlock.Complete(); )); )
Sve, zapravo, cjevovod već radi, možete mu slati poruke. Ostaje samo zaustaviti ga dodavanjem naše metode Start:

Početak

public void Start() ( do ( var getMailsTasks = _config.CredentialsList.Select(credentials => Task.Run(() => GetMails(credentials))).ToList(); foreach (var task in getMailsTasks) task.Wait( ); Thread.Sleep(2000); ) while (!_stopPipeline); //Zaustavi cjevovod - čekaj završetak svih krajnjih točaka _sortMailDataBlock.Complete(); _addToCrmDataBlock.Completion.Wait(); _addToFblDataBlock.Completion.Wait(); _addToBounceDataBlock .Completion.Wait(); if (_stopPipeline) Logger.Log.Warn("Cjevovod je zaustavio korisnik"); )


Prijeđimo na delegate.
Razvrstavanje ... Pa, recimo da je sve jednostavno za nas (uvijek ćemo imati vremena zakomplicirati):

Private MessageInfo SortMail(MessageInfo mail) ( switch (mail.Mailbox.Type) ( case MailboxType.Crm: mail.Type = MessageType.GENERAL; break; case MailboxType.Bounce: mail.Type = MessageType.BOUNCE; break; case MailboxType. Fbl: mail.Type = MessageType.FBL; break; ) povratna pošta; )
Spam filter. Ovo je za domaću zadaću - koristite SpamAssassin.
Evo delegata:

Private MessageInfo FilterSpam(MessageInfo mail) ( //TODO: Dodaj povratnu poštu SpamAssassin logike; )
I tečajevi za rad sa SpamAssassin API-jem (link na projekt).
I prelazimo na raščlanjivanje slova. Raščlanjujemo automatske odgovore. Ovdje MEF stupa na scenu.
Stvaramo projekt (dll) sa sučeljima za naše dodatke (nazovimo sučelja).
Dodavanje sučelja:

Javno sučelje ICondition ( string Check(Message mimeMessage); ) javno sučelje IConditionMetadata ( Type Type ( get; ) )
I sve. Naš TopCrawler ovisi o ovom projektu i plugin projekt će ga također koristiti.
Napravite novi projekt (također dll), nazovimo ga Uvjeti.
Dodajte vrste automatskih odgovora:

#region --- Vrste --- statička klasa BounceType ( public const string Full = "BounceTypeFull"; public const string Timeout = "BounceTypeTimeout"; public const string Refused = "BounceTypeRefused"; public const string NotFound = "BounceTypeNotFound"; public const string Inactive = "BounceTypeInactive"; javni konst string OutOfOffice = "BounceTypeOutOfOffice"; javni konst string HostNotFound = "BounceTypeHostNotFound"; javni konst string NotAuthorized = "BounceTypeNotAuthorized"; javni konst string ManyConnections = "BounceTypeManyConnections"; )
I klase koje implementiraju naše sučelje:

Javna klasa ConditionNotFound1: ICondition ( public string Check(Message mimeMessage) ( if (!mimeMessage.MessagePart.IsMultiPart) return null; const string pattern = "Diagnostic-Code:.+smtp.+550"; var regexp = new Regex(pattern , RegexOptions.IgnoreCase); return mimeMessage.MessagePart.MessageParts.Any(part => part.ContentType.MediaType == "message/delivery-status" && regexp.IsMatch(part.GetBodyAsText())) ? BounceType.NotFound: null ; ) ) ... javna klasa ConditionTimeout2: ICondition ( return BounceType.Timeout; ) ...
Kao što ste primijetili, sve je u atributima. Pomoću njih će se učitati dodaci.
Vraćamo se našem projektu i učitavamo dodatke:

Class Crawler ( ... //Plugins public IEnumerable > BounceTypeConditions ( get; set; ) private void LoadPlugins() ( try ( var container = new CompositionContainer(new DirectoryCatalog(_config.PluginDirectory), true); container.ComposeParts(this); ) catch (Exception ex) ( Logger.Log .Error("Nije moguće učitati dodatke: (0)", npr. Poruka); ) ) ...
Povlačimo LoadPlugins u konstruktor naše klase. Neću detaljno objašnjavati mehanizam učitavanja - Google će to učiniti bolje.

Prijeđimo na našeg delegata za provjeru tipa odbijanja. Uvjeti će se primjenjivati ​​naizmjenično dok prva - isključiva metoda - ne proradi:

Private MessageInfo BounceTypeCheck(MessageInfo mailInfo) ( try ( foreach (var uvjet u BounceTypeConditions) ( var res = condition.Value.Check(mailInfo.Mail); if (res == null) continue; mailInfo.Subtype = res; Logger.Log .Debug("Uvjet tipa odbijanja [(0)] pokrenut za poruku [(1)]", uvjet.Metadata.Type, mailInfo.Mail.Headers.MessageId); break; ) ) catch (Exception ex) ( Logger.Log .Error("Nije uspjelo određivanje vrste odbijanja za poruku "(0)": (1)", mailInfo.Mail.Headers.MessageId, ex.Message); Logger.ErrorsCounters.Increment(); ) return mailInfo; )
Dakle, ako se pojavi nova logika, dovoljno je samo dodati novu klasu u projekt s dodacima koji implementiraju naše sučelje i - voila! Neću priložiti primjer drugog dodatka za određivanje pošiljatelja pisma - tako da je to već dugačak post (automatski odgovor je generirao sam poslužitelj, tako da pošiljatelja također treba analizirati iz zaglavlja pismo).

Sa zapisom rezultata u DB također ništa neobično. Na primjer, ovako:

Private void AddToBounce(MessageInfo mail) ( try ( MailWH.BounceAdd(mail); Functions.ProcessedCounters.Increment(); Functions.Log.Debug("Send Bounce to MailWH"); ) catch (Exception ex) ( Functions.Log. Error("Error saving Bounce message "(0)" to MailWH: (1)", mail.Mail.Headers.MessageId, ex.Message); Functions.ErrorsCounters.Increment(); ) )

Bounce Add

public static long BounceAdd(MessageInfo message) ( using (var conn = new SqlConnection(ConnectionString)) using (var cmd = new SqlDataAdapter("BounceAdd", conn)) ( var body = message.Mail.FindFirstPlainTextVersion() == null? message.Mail.FindFirstHtmlVersion().GetBodyAsText() : message.Mail.FindFirstPlainTextVersion().GetBodyAsText(); var outId = new SqlParameter("@ID", SqlDbType.BigInt) ( Direction = ParameterDirection.Output); cmd.SelectCommand .CommandType = CommandType.StoredProcedure;cmd.SelectCommand.Parameters.Add(new SqlParameter("@RawMessage", message.Mail.RawMessage)); cmd.SelectCommand.Parameters.Add(new SqlParameter("@Message", body)) ; cmd.SelectCommand.Parameters.Add(new SqlParameter("@Subject", message.Mail.Headers.Subject ?? "")); cmd.SelectCommand.Parameters.Add(new SqlParameter("@MessageID", message.Mail .Headers.MessageId ?? "")); cmd.SelectCommand.Parameters.Add(new SqlParameter("@AddressTo", message.Mail.Headers.To.Address ?? "")); cmd.SelectComm and.Parameters.Add(new SqlParameter("@AddressFrom", message.Mail.Headers.From.Address ?? "")); cmd.SelectCommand.Parameters.Add(new SqlParameter("@DateRecieved", DateTime.Now)); cmd.SelectCommand.Parameters.Add(new SqlParameter("@BounceTypeSysName", (object)message.Subtype ?? DBNull.Value)); cmd.SelectCommand.Parameters.Add(new SqlParameter("@SourceFrom", (object)message.Recipient ?? DBNull.Value)); // TODO: Dodavanje ListId podrške cmd.SelectCommand.Parameters.Add(new SqlParameter("@ListId", DBNull.Value)); cmd.SelectCommand.Parameters.Add(outId); spoj.otvori(); cmd.SelectCommand.ExecuteNonQuery(); return outId.Value as long? ?? 0; ) )


Žao mi je što nisam imao vremena pokazati TopShelf - post je već prenapuhan.

zaključke

U ovom vodiču naučili smo da zadatak prikupljanja pošte možda i nije tako lak. Razvijena jezgra omogućuje brzo dodavanje novih koraka procesa - DataFlow blokova, bez utjecaja na postojeću logiku. Dodatni podsustav omogućuje vam brzu izgradnju logike parsiranja nalik skripti, a sam DataFlow paralelizira sve izračune (i imamo mogućnost fleksibilne konfiguracije višenitnosti za određeni stroj). TopShelf nam daje mogućnost pokretanja usluge u uslužnom i konzolnom načinu radi lakšeg otklanjanja pogrešaka.

Fuh... Ako ste zainteresirani, reći ću vam kako to staviti na tračnice Continious Integration, postaviti autobuildove i izdati izdanje kroz VS Release Management.

Oznake: Dodajte oznake

Najpopularniji povezani članci