Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • Prikupljanje pošte iz različitih poštanskih sandučića na jednom Gmail računu. Postavite sakupljač pošte na Gmailu, upute korak po korak

Prikupljanje pošte iz različitih poštanskih sandučića na jednom Gmail računu. Postavite sakupljač pošte na Gmailu, upute korak po korak

Danas je to možda najpopularniji poštanski servis. A mi smo, razmatrajući ovaj ili onaj resurs, slučajno odredili da se svaki poštanski sandučić može povezati na drugu poštansku adresu iz druge usluge.

Uostalom, nije uvijek zgodno otići do svakog poštanskog sandučeta i provjeriti poštu. Stoga je, radi pogodnosti, kreirana mogućnost dodavanja poštanskog sandučeta na postojeću adresu. Tada će se sva pošta prikupljati na jednom mjestu, u jednom poštanskom sandučetu. Danas ćemo samo naučiti kako organizirati prikupljanje pošte iz drugih kutija.

Počnimo s Mail.ru

Kako dodati poštansko sanduče u Mail ru

Usluga mail ru mail pruža mogućnost dodavanja poštanskog sandučeta treće strane vašem glavnom.

Da biste dodali još jedno poštansko sanduče, idite na svoj glavni mail ru mail nalog i kliknite na svoju adresu u gornjem desnom uglu

I kliknite na dugme da dodate poštanski sandučić».

Nakon unosa podataka, pritisnite " Da uđem».

Kao rezultat naših radnji, pojavila se fascikla s našim imenom i prezimenom i tamo će biti isporučena pisma iz Yandex pošte. I više nećete morati ići u poštansko sanduče iz Yandexa da provjerite novu poštu.

Sada ćemo učiniti nešto slično u Yandex pošti.

Kako dodati poštansko sanduče u Yandex?

Da bismo dodali poštansko sanduče iz druge poštanske usluge u sistemu Yandex, idemo i na naš Yandex mail nalog

I kliknite na ikonu zupčanika i odaberite " Prikupljanje pošte iz drugih poštanskih sandučića».

Idite na "Postavke" Sakupljanje pošte". Sada ćemo dodati kutiju sa mail ru. Unosimo naš email box, lozinku za njega i kliknemo " Omogući kolektor»

U sljedećem koraku možete dodati oznaku e-porukama iz Mail-a. Sva pisma iz mail servisa će ići u folder Inbox. Stare e-poruke treba označiti kao pročitane. Zatim ponovo unesite lozinku i kliknite " Sačuvaj promjene».

To je to, povezali smo dodatni poštanski sandučić na Yandex mail. Ako u budućnosti više ne želite da primate pisma iz povezanog poštanskog sandučeta, možete ga isključiti u bilo kojem trenutku.

Ostale kutije se mogu dodati na isti način.

Za prebacivanje između glavnog i dodanog okvira, koristite glavni meni, a zatim odaberite okvir koji vam je potreban.

Kako dodati poštansko sanduče na Gmail?

Mail od Google-a vam također omogućava da povežete dodatnih 5 poštanskih sandučića.

I odaberite stavku ""

Idi na karticu " Računi i uvoz"i kliknite na link" Dodajte nalog e-pošte»

U novom prozoru unesite adresu kutije koju ćemo dodati. Kliknite na " Dalje».

Zatim, zauzvrat, navedite lozinku za poštansko sanduče koje se dodaje, a zatim promijenite POP server u pop3.mail. en. Označite okvir koji kontrolira da li se kopije primljenih e-poruka pohranjuju na serveru. Ovo će biti vaše osiguranje u slučaju da se nešto desi vašem Google nalogu, vaša pisma će biti sačuvana na mail ru serveru. Da biste lakše prepoznali u koji sandučić je pismo stiglo, dodajte oznaku svim dolaznim pismima s mail ru

Nakon toga pritisnite " Dodaj račun».

Na sljedećoj stranici ništa ne mijenjamo, osim što možete postaviti svoje Korisničko ime. Unesite lozinku za poštansko sanduče i kliknite " Dodaj račun».

Nakon toga, e-mail s kodom za potvrdu bit će poslat na vaš dodani poštanski sandučić. Možete potvrditi na dva načina: slijedite vezu u pismu ili kopirajte kod iz pisma i zalijepite ga u polje. Pritisnite " Potvrdi».

Sada su se postavke promijenile. Kao što vidite ispod na snimku ekrana, pojavila se naša poštanska adresa dodatka, koja se može promijeniti ili izbrisati.

Takođe možete podesiti podrazumevani okvir sa mail ru za slanje pisama klikom na odgovarajuću vezu.

A sada su pisma iz mail ru sandučića uspješno stigla u kutiju od Gugla. Kao što vidite, sva pisma su označena oznakom koju postavljamo u procesu dodavanja poštanskog sandučeta.

A kada kreirate novo pismo, možete odabrati iz kojeg poštanskog sandučeta želite poslati pismo.

Takođe, za prikupljanje pisama na jednom mjestu možete koristiti posebne programe - klijente pošte. Najpopularniji je " The Bat". Ali ovaj program se plaća. Među slobodnim Mozilla Thunderbird. O čemu, pročitajte na našoj web stranici.

Napišite u komentarima koristite li klijente e-pošte ili sakupljač pisama, kao što smo danas opisali.

I dozvolite mi da završim sa ovim. Sretno i uspjeh svima vama!

Moramo nastojati da nas ne razumiju svi, već da osiguramo da ne budemo pogrešno shvaćeni.

Prošli put sam započeo seriju članaka o prikupljanju pošte iz više različitih poštanskih sandučića, čak i kreiranih na različitim servisima, u jedan glavni poštanski sandučić, koji korisnik stalno kontrolira i lakše mu je raditi sam s njim nego pregledavati svu svoju e-poštu kutije odvojeno. Pročitajte više o potrebi prikupljanja pošte i njenoj implementaciji na GMail servisu.

Planiram ovu seriju članaka za 3 članka do sada. Danas ću vam reći o postavljanju prikupljanja pošte u jednako poznatom servisu pošte - Yandex.

Prikupljanje pošte s drugih računa u Yandexu postavlja se jednako lako kao i u drugim uslugama.

Proces postavljanja prikupljanja pošte u Yandexu.

Da biste aktivirali mogućnost prikupljanja sve pošte u vašem Yandex poštanskom sandučiću sa bilo kojeg od vaših naloga na istim ili drugim poštanskim servisima, prije svega, prijavite se na svoj Yandex račun, koji će biti glavni. U njemu ćete prikupljati poštu iz drugih kutija.

Otvorite odjeljak postavki pošte i odaberite "Prikupi poštu iz drugih poštanskih sandučića".

Možete prikupljati poštu iz bilo kojeg poštanskog sandučića koji se nalazi na bilo kojoj poštanskoj usluzi, a ne samo iz vaše pošte koja se nalazi na istoj usluzi Yandex!

Primjer za ovaj članak će pokazati proces prikupljanja pisama s Mail.ru pošte.

Unesite punu adresu e-pošte sa koje ćete prikupljati pisma i lozinku sa nje, a zatim kliknite na "Omogući sakupljač".

Ako ste uneli ispravnu prijavu i lozinku sa maila, tada ćete u sljedećem prozoru vidjeti poruku o uspješnom povezivanju i ovdje možete izvršiti neke postavke za prikupljanje pisama. Na primjer, možete dodijeliti oznaku prikupljenim porukama, kao i prikazati stare proslijeđene poruke kao pročitane. Označite opcije koje su vam potrebne, zatim unesite lozinku iz svoje druge e-pošte ponovo na dnu i kliknite na "Sačuvaj promjene". Pošta će se početi prikupljati za 10 minuta.

U ovom prozoru postavki nećete moći odabrati zaseban folder za prikupljanje pisama iz povezanog poštanskog sandučeta. U početku će biti naveden folder Inbox i on se ne mijenja. To je zbog činjenice da se u početku pošta prikuplja pomoću IMAP protokola i ovaj protokol kopira cijelu strukturu foldera iz pošte koju ste povezali.

Ako postoje 2 opcije za prisilno razvrstavanje prikupljene pošte u foldere:

    Promijenite postavke prikupljanja pošte i stavite POP3 protokol umjesto IMAP-a (koji je inicijalno postavljen);

    Postavite filtriranje e-pošte kasnije, odnosno stvorite uslov pod kojim će primljena pošta ići u fasciklu koja vam je potrebna, zaobilazeći Inbox.

Druga opcija je, mislim, poželjnija, posebno za početnike, kako ne bi čačkali po postavkama veze s drugom poštom.

Sada će sva pisma koja stignu na poštu koju ste povezali preći u trenutnu, koja je vaša glavna. I tada nema potrebe da idete posebno na drugu poštu da biste provjerili ima li novih slova u njoj.

Kako odvojeno pogledati sva pisma prikupljena iz povezane pošte?

Nakon što dodate poštu, vidjet ćete oznaku s njenim imenom na lijevoj strani ispod foldera pošte. primjer:

Klikom na ovu oznaku vidjet ćete zasebno sva pisma iz povezanog poštanskog sandučeta.

Kako promijeniti postavke ili onemogućiti prikupljanje pošte iz određenog poštanskog sandučeta?

Ako trebate promijeniti bilo što u postavkama za prikupljanje pošte iz dodanog poštanskog sandučića, to možete učiniti tamo u postavkama Yandex pošte, kroz odjeljak "Prikupljanje pošte iz drugih poštanskih sandučića".

Ako trebate onemogućiti ili ponovo omogućiti prikupljanje pošte sa određene spojene kutije, pritisnite prekidač “On”. / Isključeno na listi povezanih poštanskih sandučića.

Ako trebate otvoriti postavke prikupljanja pošte, kliknite na naziv poštanskog sandučeta, a zatim kliknite na vezu "Postavke" koja se pojavi. Kao rezultat, otvorit će se isti prozor postavki kao pri povezivanju pošte ().

Zaključak.

U zaključku, želim napomenuti da obično nema problema sa prikupljanjem e-pošte u usluzi Yandex i ništa ne treba konfigurirati u drugoj pošti (koju povezujete). Ali postoji vrlo hiroviti servis koji se zove GMail :) Kada ga povežete (i to ne samo na Yandex, već čak i na sebe), često nastaju problemi i to zbog povećane sigurnosti ove Google pošte. Ne, ne raspravljam, sigurnost je dobra! Ali ponekad dostigne nivo ludila, na primjer, kada Gmail blokira vezu sa svojim drugim GMail box-om, a oba su prijavljeni sa istog kompjutera i iste IP adrese :)) Govorit ću o sličnim problemima sa povezivanjem Google mail-a u posebnom članku.

U ovom članku ćemo govoriti o tome šta je "pošta iz drugih sandučića" i "prikupljanje pisama sa drugih računa". Pregledi i poređenja usluga e-pošte.

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

Mail.ru servis pošte, Yandex i Google pretraživači već nekoliko godina nude veoma korisnu i potrebnu funkcionalnost koja vam omogućava da u jednu poštu kombinujete sve ostale naloge e-pošte. Drugim riječima, vrijedi dodati i konfigurirati sve svoje "mailove" jednom, i postat će moguće upravljati njima u jednom prozoru bez stalnog unosa korisničkog imena i lozinke.

Usluge pošte nude nam ogromno mjesto za pohranu svih dolaznih pisama, korisničko sučelje, dobru funkcionalnost upravljanja i još mnogo toga. Za testiranje mogućnosti navedenih poštanskih servisa izdvojićemo tri parametra za vrednovanje njihovog rada: 1) potrebno je upravljati različitim e-mail nalozima, uključujući i sa raznih servisa i sajtova, preko jednog mail klijenta; 2) ima lični potpis i ime za svaku poštu; 3) brisanje poruka sa servera onih mail naloga koji su dodani u mail, yandex ili google mail.

Naš zadatak izgleda ovako:

Pa počnimo. Mi smo prvi koji je testirao uslugu Mail.ru, koja nam kaže: „Možete prikupljati poštu iz svih svojih poštanskih sandučića u jedno poštansko sanduče na Mail.ru.

Podesite kolekciju e-poruka sa bilo kog servera koji koristi IMAP ili POP3 protokol. Da biste dodali eksternu poštu osim @mail, @inbox, @list, @bk, morate imati barem jednu poštu koja već postoji na navedenim serverima iz pošte. Drugim riječima, prvo registrirajte e-poštu, a zatim dodajte druge mail naloge. Proces registracije za mail je jednostavan, nema smisla ga opisivati, ali ćemo opisati dodavanje drugih e-mailova na ovaj mail nalog.

Zatim će od vas biti zatraženo da unesete prijavu i lozinku za bilo koje poštansko sanduče koje koristite, a u roku od 3-5 minuta, “Sakupljač pošte iz pošte” će kreirati fasciklu s nazivom dodane pošte pored “pretinca” , “poslano”, “spam” i drugo.

Zapravo, sakupljač pošte će raditi u roku od 10-15 minuta i dodati će sva slova u novokreirani folder iz kutije koju ste naveli. Sva pristigla pisma za novu e-poštu biće poslata u ovaj folder, a biće moguće slati pisma i iz priloženog sandučeta. Prilikom kreiranja novog pisma pojavit će se polje "Od" u kojem možete odabrati iz kojeg sandučeta će pismo biti poslano.

Prednosti Mail.ru servisa pošte uključuju jednostavno dodavanje i jednostavno postavljanje drugih poštanskih sandučića, nema potrebe za specificiranjem različitih protokola (POP3, SMTP). Ovo je veoma važno jer ne zna svaki korisnik šta je to.

Nedostaci Mail.ru su to što je nemoguće dodijeliti ime i potpis za svaku novododatu poštu (bilo koji novi e-mail osim glavne), odnosno ime i potpis glavne pošte će se distribuirati na svaka adresa i to je to. Još jedan veliki nedostatak je to što prilikom učitavanja e-pošte u poštu, ne postoji način da se originalne e-poruke automatski izbrišu sa priloženog servera poštanskog sandučeta. Zašto je toliko važno brisati poruke sa servera dodanog poštanskog sandučeta? Time ćete izbjeći popunjavanje priloženog maila, jer. Vanjski nalozi e-pošte su obično premali za pohranjivanje e-pošte. Na primjer, ako je prostor za poštu na vanjskom računu pun, Mail.ru neće prikazati nijednu novu poruku dok ne uđete u vanjski interfejs za poštu i direktno izbrišete poruke odatle kako biste oslobodili prostor. Osim toga, vezujemo poštu za Mail u nadi da ćemo dobiti puno prostora za pohranu naše pošte, što može biti ograničeno resursima hostinga. Dakle, uprkos činjenici da Mail.ru nudi gotovo neograničenu veličinu poštanskog sandučića, kada dodajete poštu iz druge domenske zone (npr. [email protected]), vaši dodani resursi e-pošte neće se povećavati na 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 servisu Mail nije zadovoljila naš zadatak na dva od tri poena, ukupno je dobila jedan bod.

Istina, Mail.ru ima još jedan način za dodavanje eksterne pošte, tačnije povezivanje ili prijavu na vanjsku poštu. izgleda ovako:

Ova metoda nije prikladna za naš zadatak, jer ovo nije sakupljač pošte, već korisnički mod koji se povezuje na poštu i svaki put učitava sve fascikle i pisma u interfejs pošte. Ali ovdje je moguće dodati lični potpis i ime za svaku poštu, moguće je slati pisma iz konfigurirane pošte. Brisanje e-pošte iz preuzetih poštanskih sandučića ne funkcionira. nije sakupljač pošte.

Bitan! Neki korisnici pogrešno misle da ako se pisma prikažu u pošti, onda se pošta iz koje je došlo do preuzimanja može obrisati. Još jednom obratimo pažnju da Mail.ru radi kao preglednik pošte, a ako obrišete poštu, ona će biti izbrisana i u glavnom poštanskom sandučetu i u pošti.

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

Yandex sakupljač pošte konfiguriran je na sličan način, ali ako je pošta povezana s neke stranice, na primjer site.ru, tada će biti potrebno navesti dodatne postavke, pogledajte snimak ekrana.

Usluga Mail je to uradila za nas, dok Yandex nudi ručno postavljanje svih postavki iz pošte treće strane. Ovdje nema ništa komplikovano: u polje za prijavu unesite puno ime e-pošte ( [email protected]), u polje server unesite samo domenu (site.ru), bolje je da sve ostale postavke ostavite po defaultu ili ih promijenite ako znate šta radite. Nakon uspješnog dodavanja pošte pojavit će se natpis:

Za razliku od sakupljača pošte, Yandex nudi izbor da li će originalna pisma sačuvati u dodanom poštanskom sandučetu ili ne. U svim ostalim aspektima, Yandexov sakupljač pisama radi na sličan način sa Mail.ru, moguće je odabrati poštanski sandučić iz kojeg ćete poslati pismo. Ali Yandex ima isti problem s potpisivanjem pisama: ne postoji način da se postavi pojedinačno ime i potpis za svako dodano poštansko sanduče.

Sudeći po navigaciji, moguće je dodati pojedinačni potpis za svako poštansko sanduče, ali u stvarnosti to ne radi. Odabiremo poštu, propisujemo ime i potpis, kliknemo na sačuvaj. To je to, potpis je sačuvan i radi, ali se čuva i za sve ostale poštanske sandučiće, odnosno dodeljivanjem imena i potpisa jednom sandučetu automatski menjate ova podešavanja u svim mejlovima kombinovanim u Yandexu. Čak i ako se izabere bilo koji drugi okvir, potpis će sada svuda biti isti.

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

Želeo bih da primetim da, nakon što je „preturao“ po sva tri servisa za sklapanje pošte, izgleda da je Mail u žurbi „promisao“ svoju funkcionalnost. Iako će zadovoljiti većinu korisnika, ali, da budem iskren, Mail je napravio skupljača pošte za pokazivanje, kako bi se zabilježio u takmičarskoj utrci. Sve radi dobro i bez kvarova, ali asembler iz Mail-a nije se nosio s našim zadatkom. Postoji nekoliko oglasnih blokova u interfejsu pošte, ali oni ne ometaju rad sa slovima.

Što se tiče Yandexa, koji je davno kreirao sakupljač e-pošte, čini se da ova konkretna 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ćava da povežete domene sa njihovim dns serverima, a kasnije kreirate i konfigurišete poštu. 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 Yandex pošte! Oduzeti— ograničenje u sakupljaču pošte za 10 poštanskih sandučića.

Finalista i pobjednik je Googleov kolekcionar e-pošte, koji se s našim zadatkom, uprkos tome, nosio s praskom Ograničenje od 5 kutija

Naravno, sve mora biti paralelno. Ovdje dolazi u igru ​​moja omiljena TPL DataFlow biblioteka.

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

Kao dodatni dodatak, Zabbixu ćemo dodati nadzor. (Radit ćemo 24/7 i izdavati hvaljene brzine - ovo morate pratiti).

Idi

Kreiramo 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 fasciklu projekta, kreirajte App.Debug.config i App.Release.config. Istovarujemo projekat iz studija, otvaramo njegov kod (u daljem tekstu TopCrawler.csproj). Dodajte u konfiguracijski odjeljak:

Konfiguracije

app.config app.config


A ispod je prilagođeni cilj za MSBuild:

Transformirajte metu

$(TargetFileName).config


Lično, navikao sam na ovaj način - na staromodan način - dodati transformaciju konfiguracija u odvojena okruženja.
Radi praktičnosti, predlažem konfiguracije jakog tipa. Posebna klasa će pročitati konfiguraciju. (O teorijskim aspektima takve odluke možete govoriti u komentarima). Konfiguracije, evidencije, praćenje - odličan razlog za implementaciju Singleton šablona.

Kreirajte istoimeni folder u projektu (mora postojati red). Unutar kreiramo 3 klase - Config, Logger, Zabbix. Naš drvosječa:

drvosječa

static class Logger ( javni statički NLog.Logger Log ( get; privatni skup; ) javni statički NLog.Logger arhiv ( get; privatni skup; ) static Logger() ( Log = LogManager.GetLogger("Global"); Archive = LogManager. GetLogger("Arhivator"); ) )


Nadgledanje sa Zabbixom zaslužuje poseban post, 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; privatni skup; ) static Zabbix() ( Sender = new ZabbixSender(Config.ZabbixServer, Config.ZabbixPort); ) ) struct ZabbixItem ( javni string Host; javni string ključ javni niz; ; ) klasa ZabbixSender ( interna struktura SendItem ( // ReSharper onemogućuje InconsistentNaming - Zabbix je javni host niza osjetljiv na velika i mala slova; javni ključ niza; javna vrijednost stringa; javni sat stringa; // ReSharper vraća InconsistentNaming ) #pragma warning disable struct 0649 ZabbixResponse ( public string Response; public string Info; ) #pragma warning restore 0649 #region --- Konstante --- public const string DefaultHeader = "ZBXD\x01"; public const string SendRequest = "podaci pošiljatelja"; public const int Default Timeout = 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 string samo za čitanje _zabbixserver; privatno samo za čitanje int _zabbixport; #endregion #region --- Konstruktori --- javni ZabbixSender(string zabbixserver, int zabbixport) : this(zabbixserver, zabbixport, DefaultTimeout) ( ) public ZabbixSender(string zabbixserver, int zabbixport =server_zabbixport_server_zabbix) zabbixport; _timeout = timeout; ) #endregion #region --- Metode --- javni string SendData(ZabbixItem itm) (vrati SendData(nova lista (1) (stavka)); ) javni string SendData(Lista lstData) ( pokušaj ( var serijalizer = novi JavaScriptSerializer(); var vrijednosti = nova lista (lstData.Count); values.AddRange(lstData.Select(itm => novi SendItem (host = itm.Host, ključ = itm.Key, vrijednost = itm.Value, sat = Math.Floor((DateTime.Now.ToUniversalTime() - _dtUnixMinTime).). TotalSeconds).ToString(CultureInfo.InvariantCulture) ))); var json = serializer.Serialize(new ( 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(header, 0, packet, 0, header.Length); Buffer.BlockCopy(dužina, 0, paket, header.Length, length.Length); Buffer.BlockCopy(podaci, 0, paket, 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 = Da new byte( Socket , bafer, 0, buffer.Length, _timeout); if (DefaultHeader != Encoding.ASCII.GetString(buffer, 0, buffer.Length)) izbaci novi izuzetak ("Invalid header"); //Message length length buffer = new byte ; ReceivData(socket, buffer, 0, buffer.Length, _timeout); var dataLength = BitConverter.ToInt32(buffer, 0); if (dataLength == 0) throw new Exception("Invalid data length"); //Message buffer = novi bajt; ReceivData(socket, buffer, 0, buffer.Length, _timeout); var odgovor = serializer.Deserialize (Encoding.ASCII.GetString(buffer, 0, buffer.Length)); return string.Format("Odgovor: (0), Info: (1)", response.Response, response.Info); ) ) catch (Exception e) ( return string.Format("Exception: (0)", e); ) ) private static void ReceivData(Socket pObjSocket, bajt bafer, int offset, int size, int timeout) ( var startTickCount = Environment.TickCount; var primljen = 0; uradi (ako (Environment.TickCount > startTickCount + timeout) izbaci novi TimeoutException(); pokušaj (primljeno += pObjSocket.Receive(bafer, pomak + primljeno, veličina - primljeno, SocketFlags.None) ; ) catch (SocketException ex) ( if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferleSpace;3) throw else()vaSBufferSpace;3); ) dok (primljeno< size); } #endregion } }


Konfiguracije… Vrijeme je da uradimo barem nešto zanimljivo. Prvo, u konfiguracijama ćemo pohraniti kutije koje anketiramo. Drugo, postavke protoka podataka. predlažem ovako:

konfiguracije



Dakle, host i port na koji se povezuje, korisnik i lozinka - ovdje je sve jasno. Sljedeći je tip 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 prijave neželjene pošte. Sama kutija već kategorizira slovo, tako da za takve situacije odmah postavljamo vrstu kutije. Sa postavkama DataFlow-a, bit će dalje jasno kada počnemo kreirati objekte. Ovdje ćemo imati vlastite sekcije u konfiguraciji. Postoji gomila priručnika kako to učiniti, pa ću samo pokazati rezultat:

Definiranje tipova

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


Kreiranje sekcija

///

/// Custom config section /// javna klasa CustomSettingsConfigSection: ConfigurationSection ( public CredentialsCollection CredentialItems ( get ( return base["CredentialsList"] kao CredentialsCollection; ) ) public DataBlockOptionsCollection DataFlowOptionsItems ( get ( return base["DataFlowOptions") astionsL;


///

/// Prilagođeno prikupljanje - lista vjerodajnica /// javna klasa CredentialsCollection: ConfigurationElementCollection, IEnumerable ( zaštićeno nadjačavanje ConfigurationElement CreateNewElement() (vraćanje novog CredentialsElement(); ) zaštićeno nadjačavanje objekta GetElementKey(ConfigurationElement element) (vraćanje ((CredentialsElement)element).Korisničko ime; ) public CredentialsElement this (dobi (vrati kao BaseGetials)E indeks ) javni novi IEnumerator < Count; i++) { yield return BaseGet(i) as CredentialsElement; } } } /// /// Stavka prilagođenih akreditiva /// javna klasa CredentialsElement: ConfigurationElement ( javni string Hostname ( get ( return base["hostname"] kao string; ) ) javni string Korisničko ime ( get ( return base["username"] kao string; ) ) javni string Lozinka ( get ( return base ["password"] kao string; ) ) javni string Tip ( get ( return base["type"] kao string; ) ) javni string Port ( get ( return base["port"] kao string; ) ) ) /// /// Prilagođena kolekcija - lista opcija DataBlock /// javna klasa DataBlockOptionsCollection: ConfigurationElementCollection, IEnumerable ( zaštićeno nadjačavanje ConfigurationElement CreateNewElement() (vraćanje novog DataBlockOptionsElement(); ) zaštićeno nadjačavanje objekta GetElementKey(ConfigurationElement element) ( return ((DataBlockOptionsElement)element).Name; ) public CredentialsElement this ( get ( return BaseG index) kao BaseG; ) javni novi IEnumerator GetEnumerator() ( za (var i = 0; i< Count; i++) { yield return BaseGet(i) as DataBlockOptionsElement; } } } /// /// Stavka prilagođenih opcija DataBlock /// javna klasa DataBlockOptionsElement: ConfigurationElement ( javni string Name ( get ( return base["name"] kao string; ) ) javni string Maxdop ( get ( return base["maxdop"] kao string; ) ) javni string BoundedCapacity ( get ( return base ["boundedcapacity"] kao string; ) ) )


Neću pisati potpunu implementaciju konfiguracije, podrazumijeva se da će se tokom procesa razvoja tamo dodati parametri koji su nam potrebni.

Naše prilagođene postavke čitamo ovako:

Čitanje

javna lista CredentialsList ( get; privatni skup; ) javni rečnik DataFlowOptionsList ( get; privatni set; ) ... static Config() ( probajte ( var customConfig = (CustomSettingsConfigSection)ConfigurationManager.GetSection("CustomSettings"); //Nabavite poštanske sandučiće za svaki (var stavka u customConfig.CredentialItemsL) CredentialItems new MailboxInfo (Hostname = item.Hostname, Port = Convert.ToInt32(item.Port), User = item.Username, Type = item.Type, Password = item.Password )); //Nabavite postavke protoka podataka za svaki (var stavku u customConfig.DataFlowOptionsItems) DataFlowOptionsList.Add(item.Name, nove DataBlockOptions ( Maxdop = Convert.ToInt32(item.Maxdop), BoundedCapacity = Convert.ToInt32(item.BoundedCapacity) )); ) exception (izuzetak.) catch. Fatal("Greška pri čitanju konfiguracije: (0)", npr. Poruka); izbaci; ) )


Nekako se ispostavilo da je jako dugo, a nismo ni došli do najzanimljivijeg dijela.

Izostavimo za sada vezivanje sa TopShelfa, brojače performansi, komunikaciju sa bazom podataka i pređimo na posao! Kreiramo klasu Crawler - jezgro. Počnimo čitanjem pošte:

Privatni volatile bool _stopPipeline; ... public void Start() ( uradi ( var getMailsTasks = _config.CredentialsList.Select(credentials => Task.Run(() => GetMails(credentials))).ToList(); foreach (var zadatak u getMailsTasks) zadatak .Wait(); Thread.Sleep(2000); ) while (!_stopPipeline); //Zaustavi cjevovod - sačekajte završetak svih krajnjih tačaka //DataFlow cjevovod će se zaustaviti ovdje ako (_stopPipeline) Logger.Log.Warn("Cjevovod ima zaustavio korisnik"); )
Ovdje je lijenost učinila svoje i odlučio sam da se ne trudim - ako ima oko 20-30 kutija, možete pokrenuti zadatak za svaku i ne brinuti o broju niti. (Dozvoljavam vam da bacate paradajz.)

Pređimo na čitanje:

Private void GetMails(Informacija o MailboxInfo) (pokušajte (koristeći (var client = new Pop3Client()) (
Odmah izračunajmo vrijeme pristupa kutiji - bit će korisno za dijagnosticiranje mreže i opterećenja servera.

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

//Pošalji u Zabbix Zabbix.Sender.SendData(new ZabbixItem (Host = Config.HostKey, Key = info.Type + Config.TimingKey, Value = štoperica.ElapsedMilliseconds.ToString())); Logger.Log.Debug("Pošalji [(0)] tajming na Zabbix: povezan na "(1)" kao "(2)", tajming (3)ms", info.Type, info.Hostname, info.User, štoperica.ElapsedMilliseconds); varcount = client.GetMessageCount(); if (broj == 0) return; Logger.Log.Debug("Imamo novih (0) poruka u "(1)"", count, info.User); //Slanje poruka u blok 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 će biti kreiran kada se kreira klasa Crawler. Smatramo da je naša prva faza sortiranje pisma.

Dok (!_sortMailDataBlock.Post(mailInfo)) Thread.Sleep(500);
Vidite kako je jednostavno - sam transporter je jedan. Svi zadaci koji čitaju poštu bacaju poruke jednu po jednu. Ako je blok zauzet, Post će vratiti lažno i samo ćemo pričekati dok se ne oslobodi. Struja tada u ovom trenutku nastavlja da radi. To je ono što ja bez brige zovem paralelizam.

Poruka je otišla na pokretnu traku, sada se može mirno sačuvati u RAW arhivu (da, sve što pročitamo je sačuvano u fajl arhivu. Služba podrške će nam se naknadno zahvaliti).

Postavimo, na primjer, rotaciju arhive:

Nlog.config



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

//Spremi svaki mail u arhivu Logger.Log.Debug("Arhiva poruka"); Logger.Archive.Info(Functions.MessageToString(mailInfo.Mail)); ) catch (Exception ex) ( Logger.Log.Error("Parse email error: (0)", ex.Message); Functions.ErrorsCounters.Increment(); //Arhiviraj poštu svejedno 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 sa "(0)"", info.User); ) ) catch (Exception ex) ( Logger.Log.Error("Opća greška - tip: (0), poruka: (1)", ex, ex.Message); Functions.ErrorsCounters.Increment(); ) )
Ovdje smo koristili statičke brojače grešaka (po tipu kutije), gdje je ErrorsCounters:

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

Counter.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(duga vrijednost) (Interlocked.Add(ref _counter, value); ) public void Set(duga vrijednost) (Interlocked.Exchange(ref _counter, value) ; ) )


Pređimo na kreiranje cjevovoda. Recimo da imamo kutije u koje se sipaju automatski odgovori. Takva pisma treba raščlaniti (kakav auto-odgovor, od koga, po kojoj mailing listi, itd.) i dodati rezultat u skladište (DB). Recimo da postoje kutije u koje padaju FBL izvještaji. Takva pisma odmah dodajemo u bazu podataka. Sva ostala pisma se smatraju "korisnima" - treba ih provjeriti da li ima neželjene pošte i poslati na vanjski sistem, na primjer, CRM.

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

Dakle, odlučili smo se za tok posla. Mi deklariramo potrebne blokove u klasi Crawler:

Class MessageInfo ( public bool IsSpam ( get; set; ) javna poruka Mail ( get; set; ) javni string Podtip ( get; set; ) javni string Recipient ( get; set; ) javni tip MessageType ( get; set; ) javni MailboxInfo Poštansko sanduče ( get; set; ) ) klasa Crawler ( //Pipeline private TransformBlock _sortMailDataBlock; privatni TransformBlock _spamFilterDataBlock; privatni TransformBlock _checkBounceDataBlock; privatni TransformBlock _identifyDataBlock; privatni ActionBlock _addToCrmDataBlock; privatni ActionBlock _addToFblDataBlock; privatni ActionBlock _addToBounceDataBlock; ...
Kreiramo metodu inicijalizacije i kreiramo blokove cjevovoda (koristimo naše divne odjeljke iz konfiguracija za inicijalizaciju blokova):

Public void Init() ( //*** Kreirajte cjevovod *** //Kreirajte TransformBlock da biste dobili tip poruke var blockOptions = _config.GetDataBlockOptions("_sortMailDataBlock"); _sortMailDataBlock = new TransformBlock (mail => SortMail(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte TransformBlock za filtriranje neželjene pošte blockOptions = _config.GetDataBlockOptions("_spamFilterDataBlock"); _spamFilterDataBlock = novi TransformBlock (mail => FilterSpam(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte TransformBlock za sortiranje odbijanja blockOptions = _config.GetDataBlockOptions("_checkBounceDataBlock"); _checkBounceDataBlock = novi TransformBlock (mail => BounceTypeCheck(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte TransformBlock za identifikaciju vlasnika odbijanja blockOptions = _config.GetDataBlockOptions("_identifyDataBlock"); _identifyDataBlock = novi TransformBlock (mail => GetRecipient(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte ActionBlock za slanje pošte na CRM blockOptions = _config.GetDataBlockOptions("_addToCrmDataBlock"); _addToCrmDataBlock = novi ActionBlock (mail => AddToCrm(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte ActionBlock da pošaljete FBL na MailWH blockOptions = _config.GetDataBlockOptions("_addToFblDataBlock"); _addToFblDataBlock = novi ActionBlock (mail => AddToFbl(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity )); //Kreirajte ActionBlock za slanje Bounce na MailWH blockOptions = _config.GetDataBlockOptions("_addToBounceDataBlock"); _addToBounceDataBlock = novi ActionBlock (mail => AddToBounce(mail), novi ExecutionDataflowBlockOptions ( MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity ));
Sastavljamo transporter u skladu sa našom šemom:

//*** 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 krajnje jednostavno - povezujemo blok sa sljedećim (sa mogućnošću postavljanja uvjeta povezivanja). Svi blokovi se izvode paralelno. Svaki blok ima određeni stupanj paralelizma i kapaciteta (uz pomoć kapaciteta možete regulirati red čekanja prije bloka, odnosno blok je primio poruku, ali je još ne obrađuje). Dakle, moguće je postaviti visok stepen paralelizma za "složene" i duge operacije, kao što je raščlanjivanje sadržaja e-pošte.

Neću opisivati ​​DataFlow hardver, bolje je sve pročitati u originalnom 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 da ga zaustavimo dodavanjem naše metode Start:

start

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


Pređimo na delegate.
Sortiranje... Pa, recimo da nam je sve jednostavno (uvijek ćemo imati vremena da to zakomplikujemo):

Private MessageInfo SortMail(MessageInfo mail) ( switch (mail.Mailbox.Type) ( case MailboxType.Crm: mail.Type = MessageType.GENERAL; break; case MailboxType.Bounce: mail.Type = MessageType.BOUNCE; breakype; case . Fbl: mail.Type = MessageType.FBL; prekid; ) vrati poštu; )
Spam filter. Ovo je za domaći zadatak - koristite SpamAssassin.
Evo delegata:

Private MessageInfo FilterSpam(MessageInfo mail) ( //TODO: Add SpamAssassin logic return mail; )
I klase za rad sa SpamAssassin API-jem (link projekta).
I prelazimo na raščlanjivanje slova. Analiziramo automatske odgovore. Ovdje MEF ulazi u igru.
Kreiramo projekat (dll) sa interfejsima za naše dodatke (pozovimo interfejse).
Dodavanje interfejsa:

Javni interfejs ICondition ( string Check(Message mimeMessage); ) javni interfejs IConditionMetadata ( Type Type ( get; ) )
I… sve. Naš TopCrawler zavisi od ovog projekta i projekat dodataka će ga takođe koristiti.
Kreirajte novi projekat (također dll), nazovimo ga Conditions.
Dodajte vrste automatskih odgovora:

#region --- Tipovi --- statička klasa BounceType ( public const string Full = "BounceTypeFull"; public const string Timeout = "BounceTypeTimeout"; public const string Refused = "BounceTypeRefused"; public const string NotFound = "BounceTypeNotFound"; const string Inactive = "BounceTypeInactive"; public const string OutOfOffice = "BounceTypeOutOfOffice"; public const string HostNotFound = "BounceTypeHostNotFound"; public const string NotAuthorized = "BounceTypeNotAuthorized"; public constnegnegConstensionB;
I klase koje implementiraju naš interfejs:

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

Class Crawler ( ... //Plugins public IEnumerable > BounceTypeConditions ( get; set; ) private void LoadPlugins() ( probaj ( 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 konstruktoru naše klase. Neću detaljno objašnjavati mehanizam učitavanja - Google će proći bolje.

Pređimo na naš delegat za provjeru valjanosti tipa odbijanja. Uslovi će se primenjivati ​​naizmjence dok prvi - ekskluzivni metod - ne proradi:

Private MessageInfo BounceTypeCheck(MessageInfo mailInfo) ( pokušajte ( foreach (var uslov u BounceTypeConditions) ( var res = condition.Value.Check(mailInfo.Mail); if (res == null) nastavi; mailInfo.Subtype = res; Logger.Log) .Debug("Uslov tipa odbijanja [(0)] pokrenut za poruku [(1)]", condition.Metadata.Type, mailInfo.Mail.Headers.MessageId); break; ) ) catch (Exception ex) ( Logger.Log .Error("Neuspjelo 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 projektu sa dodacima koji implementiraju naše sučelje i - voila! Neću prilagati primjer drugog dodatka za određivanje pošiljaoca pisma - tako da je to već dugačak post (Server je sam generirao automatski odgovor, tako da pošiljatelja također treba raščlaniti iz zaglavlja poruke).

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

Privatno void AddToBounce(MessageInfo mail) ( pokušajte ( MailWH.BounceAdd(mail); Functions.ProcessedCounters.Increment(); Functions.Log.Debug("Send Bounce to MailWH"); ) catch (Exception ex) ( Functions.Log. Greška("Greška pri čuvanju poruke odbijanja "(0)" u MailWH: (1)", mail.Mail.Headers.MessageId, ex.Message); Functions.ErrorsCounters.Increment(); ) )

Bounce Add

public static long BounceAdd(MessageInfo poruka) (koristeći (var conn = new SqlConnection(ConnectionString)) koristeći (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.SqlDbType.BigInt) (cmd.BigIntDirection). .CommandType = CommandType.StoredProcedure;cmd.SelectCommand.Parameters.Add(new SqlParameter("@RawMessage", message.Mail.RawMessage)); cmd.SelectCommand.Parameters.Add(new SqlParameter(")body"@Message" ; 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: Dodaj ListId podršku cmd.SelectCommand.Parameters.Add(new SqlParameter("@ListId", DBNull.Value)); cmd.SelectCommand.Parameters.Add(outId); conn.open(); cmd.SelectCommand.ExecuteNonQuery(); return outId.Value as long? ?? 0; ) )


Žao mi je što nisam imao vremena da pokažem TopShelf - post je već previše naduvan.

zaključci

U ovom vodiču smo naučili da zadatak prikupljanja pošte možda i nije tako lak. Razvijeno jezgro vam omogućava brzo dodavanje novih koraka procesa - DataFlow blokova, bez utjecaja na postojeću logiku. Podsistem dodataka vam omogućava da brzo izgradite logiku raščlanjivanja nalik na skriptu, a sam DataFlow paralelizira sve proračune (a mi imamo mogućnost fleksibilnog konfiguriranja višenitnog rada za određenu mašinu). TopShelf nam daje mogućnost pokretanja usluge iu servisnom i u konzolnom načinu radi lakšeg otklanjanja grešaka.

Fuh... Ako ste zainteresovani, reći ću vam kako da ga stavite na šine Continious Integration, podesite autobuilding i objavite izdanje kroz VS Release Management.

Oznake: Dodajte oznake

Nastavljam seriju članaka o funkciji prikupljanja pošte u jedan glavni email sandučić iz bilo kojeg drugog koji se nalazi na bilo kojem servisu pošte. U prošlom članku smo govorili o postavljanju prikupljanja pošte na servisu Yandex, što je jednostavno kao i ljuštenje krušaka. A u ovom članku govorit ću o tome kako to učiniti na drugom servisu koji danas nije ništa manje popularan - Mail.ru, gdje mnogi još uvijek drže svoj glavni pretinac e-pošte, uprkos činjenici da, na primjer, usluga GMail ima jasne prednosti (opisano je o postavljanju prikupljanja pošte u Gmail-u). Ali kako se kaze,svakom svoje i nekada 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 spojili na jedan, na Mail.

Proces postavljanja prikupljanja pošte u servisu Mail.ru

Prije svega, prijavite se na svoj Mail nalog, 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 na dugme "Više" na vrhu i odaberite "Postavke".

Postavke možete otvoriti i tako što ćete kliknuti na svoju adresu e-pošte u gornjem desnom uglu, a zatim odabrati “Postavke pošte”.

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

Otvara se prvi prozor za povezivanje drugog e-mail sandučića.

Da vas podsjetim da drugi e-mail sandučić iz kojeg želite da prikupljate pisma može se nalaziti na bilo kojem servisu, a ne samo na Mail!

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

U ovom prozoru morate navesti korisničko ime i lozinku za mail koji povezujete. Ako se kutija koju povezujete nalazi na jednoj od dolje navedenih usluga, kliknite na odgovarajuće dugme na vrhu, unesite punu adresu povezane e-pošte ispod i kliknite na "Dodaj okvir":

Ako se okvir koji želite da povežete nalazi na nekom drugom servisu (nije sa liste iznad), kliknite na dugme „Ostala pošta“ na vrhu, nakon čega je potrebno da unesete punu adresu povezane pošte, lozinku iz njega i kliknite na „Dodaj okvir“.

Ako još niste unijeli svoju drugu e-poštu u ovaj preglednik, koji povezujete, tada ćete u sljedećem prozoru morati unijeti svoju prijavu i lozinku iz njega. primjer:

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

Ako je sve prošlo kako treba, dobićete poruku da je kolektor dodan. Sada morate odabrati koji folder ćete prikupljati: u posebno kreiranu mapu prema nazivu pošte koju ste povezali ili u inbox. Na vama je, ali, po mom mišljenju, zgodnije je kada pošta prikupljena iz drugog poštanskog sandučeta ide u poseban folder. Na ovaj ili onaj način, tada se može konfigurirati filtriranjem poruka.

Opcija “Primijeni filtere na primljene poruke” znači da će se svi filteri koje ste već konfigurirali u glavnoj pošti na Mail primjenjivati ​​i na poštu primljenu iz povezanog poštanskog sandučeta. Onemogućiti ili ne - odlučite.

To je to, sakupljač pošte je postavljen! Sada, u roku od nekoliko minuta (ponekad proces kasni ako ima puno pisama u povezanoj pošti), pošta iz drugog poštanskog sandučeta će početi da teče u vaš glavni.

Na ovaj način se možete povezati kako biste prikupili onoliko mailova koliko želite.

Kako odvojeno vidjeti sva pisma iz povezane pošte?

Pisma možete zasebno pregledati ako ste prilikom podešavanja prikupljanja pošte u aplikaciji Mail naznačili da se pisma prikupljaju u posebnom folderu s nazivom povezanog poštanskog sandučeta. U tom slučaju otvorite ovaj folder i vidjet ćete sva potrebna slova. primjer:

Ako niste odmah postavili prijem pisama u posebnu mapu, možete ga postaviti u bilo kojem trenutku otvaranjem kreiranog sakupljača (više o tome u nastavku).

Konfigurisanje kreiranog sakupljača pošte, njegovo onemogućavanje i omogućavanje

Ponekad ćete možda morati promijeniti postavke sakupljača pošte koji ste kreirali u aplikaciji Mail, te ga također isključiti ili ponovo uključiti.

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

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

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

Top Related Articles