Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows 10
  • Colectarea e-mailurilor din diferite căsuțe poștale într-un singur cont Gmail. Configurați un colector de e-mail Gmail, instrucțiuni pas cu pas

Colectarea e-mailurilor din diferite căsuțe poștale într-un singur cont Gmail. Configurați un colector de e-mail Gmail, instrucțiuni pas cu pas

Astăzi, acestea sunt probabil cele mai populare servicii de e-mail. Iar când luam în considerare cutare sau cutare resursă, parcă din întâmplare am făcut o rezervare pentru a putea fi conectată la fiecare cutie poștală o altă adresă poștală dintr-un alt serviciu.

La urma urmei, nu este întotdeauna convenabil să mergeți la fiecare cutie poștală și să vă verificați e-mailul. Prin urmare, pentru comoditate, a fost creată posibilitatea de a adăuga o cutie poștală la o adresă existentă. Apoi toate corespondența vor fi colectate într-un singur loc, într-o singură cutie poștală. Astăzi doar vom învăța cum să organizăm colectarea de corespondență din alte cutii poștale.

Să începem cu Mail ru

Cum să adăugați o cutie poștală la Mail ru

Serviciul de e-mail ru oferă posibilitatea de a adăuga o căsuță poștală terță parte la cea principală.

Pentru a adăuga o altă căsuță poștală, accesați contul de e-mail principal ru de e-mail și faceți clic pe adresa dvs. din dreapta sus

Și faceți clic pe butonul " pentru a adăuga o căsuță poștală».

După introducerea datelor, faceți clic pe „ A intra».

Ca urmare a acțiunilor noastre, a apărut un folder cu numele și prenumele nostru, iar scrisorile de la corespondența Yandex vor fi livrate acolo. Și nu va mai trebui să mergeți la cutia poștală de la Yandex pentru a verifica e-mailurile noi.

Acum vom face ceva similar în Yandex mail.

Cum să adăugați o cutie poștală la Yandex?

Pentru a adăuga o cutie poștală de la un alt serviciu de e-mail în sistemul Yandex, mergem și la contul dvs. de e-mail Yandex

Și faceți clic pe pictograma roată și selectați elementul " Colectarea e-mailurilor din alte cutii poștale».

Mergi la Setari " Colectați corespondența". Acum vom adăuga o cutie poștală de la mail ru. Introducem caseta noastră de e-mail, parola și facem clic pe „ Includeți colecționar»

În pasul următor, puteți specifica o etichetă pentru mesajele cu Mail. Toate scrisorile de la serviciul de poștă vor merge în dosarul Inbox. Lăsați literele vechi să fie marcate ca citite. Apoi reintroduceți parola și faceți clic pe „ Salvează modificările».

Gata, am conectat o cutie poștală suplimentară la e-mail Yandex. Dacă în viitor nu doriți să mai primiți scrisori de la căsuța poștală conectată, o puteți dezactiva oricând.

Puteți adăuga alte casete în același mod.

Pentru a comuta între casetele principale și cele adăugate, utilizați meniul principal, apoi selectați caseta de care aveți nevoie.

Cum adaug o căsuță poștală la Gmail?

Mail de la Google face posibilă, de asemenea, conectarea a 5 căsuțe poștale suplimentare.

Și selectați elementul „”

Accesați fila „ Conturi și importuri„Și dați clic pe link” Adăugați un cont de e-mail»

Într-o fereastră nouă, introduceți adresa căsuței poștale pe care o vom adăuga. Apăsăm pe „ Mai departe».

Apoi, la rândul său, specificați parola pentru căsuța poștală adăugată, apoi schimbați serverul POP în pop3.Poștă. ru... Bifați caseta care este responsabilă pentru păstrarea pe server a copiilor scrisorilor primite. Aceasta va fi plasa ta de siguranță în cazul în care se întâmplă ceva cu contul tău Google, scrisorile tale vor fi salvate pe serverul de mail ru. Pentru confortul de a recunoaște în ce cutie poștală a venit scrisoarea, adăugați o comandă rapidă la toate scrisorile primite de la mail ru

După aceea apăsăm pe „ Adaugă cont».

Pe pagina următoare, nu schimbăm așa ceva, cu excepția faptului că vă puteți întreba Nume de utilizator... Introduceți parola pentru căsuța poștală și faceți clic pe „ Adaugă cont».

După aceea, o scrisoare cu un cod de confirmare va fi trimisă către căsuța poștală adăugată. Puteți confirma în două moduri: urmați linkul din scrisoare sau copiați codul din scrisoare și lipiți-l în câmp. Faceți clic pe " A confirma».

Setările s-au schimbat acum. După cum puteți vedea în captura de ecran de mai jos, a apărut adresa noastră poștală adăugată, care poate fi schimbată sau eliminată.

De asemenea, puteți seta caseta implicită de la mail ru pentru a trimite scrisori făcând clic pe linkul corespunzător.

Și acum scrisorile din căsuța de e-mail ru au ajuns cu succes în cutia de la Google. După cum puteți vedea, toate literele sunt marcate cu o etichetă pe care am stabilit-o în procesul de adăugare a unei căsuțe poștale.

Și atunci când creați o nouă scrisoare, puteți alege din ce cutie poștală trebuie să trimiteți scrisoarea.

De asemenea, pentru a colecta scrisori într-un singur loc, puteți utiliza programe speciale - clienți de corespondență. Cel mai popular este „ Liliacul". Dar acest program este plătit. Dintre cei liberi - Mozilla Thunderbird... Citiți despre asta pe site-ul nostru.

Scrieți în comentarii dacă utilizați clienți de e-mail sau un colector de scrisori, așa cum am descris astăzi.

Lasă-mă să termin cu asta. Mult succes și succes tuturor!

Ar trebui să ne străduim să nu ne asigurăm că toată lumea ne înțelege, ci să ne asigurăm că este imposibil să nu ne înțelegem.

Ultima dată am început o serie de articole despre colectarea e-mailurilor din mai multe căsuțe poștale diferite, create chiar și pe servicii diferite, într-o singură cutie poștală principală, pe care utilizatorul o monitorizează constant și este mai ușor pentru el să lucreze doar cu el singur, decât să se uite prin toate cutiile lui poștale separat. Citiți mai multe despre necesitatea de a colecta e-mail și despre implementarea acesteia pe serviciul GMail.

Planificăm această serie de articole până acum pentru 3 articole. Astăzi voi vorbi despre configurarea colecției de corespondență într-un serviciu de e-mail la fel de cunoscut - Yandex.

Colectarea e-mailurilor din alte conturi Yandex este configurată la fel de ușor ca și în alte servicii.

Procesul de configurare a colecției de corespondență în Yandex.

Pentru a conecta posibilitatea de a colecta toate e-mailurile din căsuța poștală Yandex din oricare dintre conturile dvs. de pe același sau alte servicii de e-mail, în primul rând, conectați-vă la contul dvs. Yandex, care va fi cel principal. În el veți colecta corespondența de la alte cutii poștale.

Deschideți secțiunea de setări de e-mail și selectați „Colectați e-mailuri din alte căsuțe poștale”.

Puteți colecta e-mailuri din orice cutie poștală situată în orice serviciu de e-mail și nu numai din e-mailurile dvs. situate pe același serviciu Yandex!

Exemplul pentru acest articol va arăta procesul de colectare a scrisorilor din mail.ru.

Introduceți adresa de e-mail completă de unde veți colecta scrisorile și parola de la aceasta, apoi faceți clic pe „Activați colectorul”.

Dacă ați specificat numele de utilizator și parola corecte pentru e-mail, atunci în fereastra următoare va apărea un mesaj despre o conexiune reușită și aici puteți face câteva setări pentru colectarea scrisorilor. De exemplu, puteți aloca o etichetă literelor colectate și, de asemenea, puteți afișa scrisorile redirecționate vechi așa cum sunt citite. Marcați opțiunile de care aveți nevoie și apoi introduceți din nou parola din al doilea e-mail de mai jos și faceți clic pe „Salvați modificările”. Poșta va începe colectarea în 10 minute.

În această fereastră de setări, nu veți putea selecta un folder separat pentru colectarea scrisorilor din cutia poștală conectată. Inițial, folderul Inbox va fi listat și nu se va schimba. Acest lucru se datorează faptului că inițial e-mailurile sunt colectate folosind protocolul IMAP, iar acest protocol copiază complet structura folderului din e-mailul conectat.

Dacă există 2 opțiuni pentru a forța e-mailurile colectate să fie sortate în foldere:

    Schimbați setările de colectare a e-mailurilor și instalați protocolul POP3 în loc de IMAP (care este setat inițial);

    Configurați filtrarea ulterioară a literelor, adică creați o condiție în care e-mailurile primite vor merge în folderul de care aveți nevoie, ocolind „Inbox”.

A doua variantă cred că este mai de preferat, mai ales pentru începători, pentru a nu zbura în setările de conectare la un alt mail.

Acum toate scrisorile care ajung la e-mailul pe care l-ați conectat vor fi stivuite în cea actuală, care este cea principală. Și apoi nu este nevoie să mergeți separat la a doua e-mail pentru a verifica dacă există litere noi în ea.

Cum să vizualizați separat toate mesajele colectate din e-mailurile conectate?

După ce adăugați e-mail, veți vedea o comandă rapidă cu numele său în stânga sub folderele pentru scrisori. Exemplu:

Făcând clic pe această comandă rapidă, veți vedea separat toate literele din cutia poștală conectată.

Cum pot schimba setările sau dezactiva colectarea e-mailurilor dintr-o anumită cutie poștală?

Dacă trebuie să modificați ceva în setările pentru colectarea e-mailurilor dintr-o cutie poștală adăugată, o puteți face acolo în setările de e-mail Yandex, prin secțiunea „Colectarea e-mailurilor din alte căsuțe poștale”.

Dacă trebuie să dezactivați sau să reactivați colectarea e-mailurilor dintr-o anumită casetă conectată, faceți clic pe comutatorul „Pornit. / Oprit." în lista de casete conectate.

Dacă trebuie să deschideți setările de colectare a e-mailurilor, faceți clic pe numele casetei, apoi faceți clic pe linkul „Configurare” care apare. Ca rezultat, se va deschide aceeași fereastră de setări ca la conectarea e-mailului ().

Concluzie.

În concluzie, vreau să observ că, de obicei, nu există probleme cu colectarea e-mailurilor în serviciul Yandex și nu trebuie configurat nimic în a doua e-mail (la care vă conectați). Dar există un serviciu foarte capricios numit GMail :) Când îl conectați (nu numai la Yandex, ci chiar și la dvs.), apar adesea probleme și acest lucru se datorează securității sporite a acestei e-mailuri Google. Nu, nu mă cert, siguranța este bună! Dar uneori ajunge la nivelul de nebunie, de exemplu, atunci când Gmail blochează conexiunea la propria sa a doua căsuță poștală GMail și ambele sunt conectate de pe același computer și același IP :)) Voi vorbi despre astfel de probleme cu conectarea mail-urilor Google într-un articol separat.

Acest articol se va concentra asupra a ceea ce sunt „poștă de la alte cutii poștale” și „colectarea scrisorilor din alte conturi”. Recenzii ale serviciilor poștale și comparații.

Pe măsură ce funcționalitatea serviciilor de corespondență este actualizată, vom publica știri la sfârșitul acestui articol.

Serviciul de e-mail Mail.ru, motoarele de căutare Yandex și Google oferă de câțiva ani funcționalități foarte utile și necesare, ceea ce vă permite să combinați toate celelalte conturi de e-mail într-un singur e-mail. Cu alte cuvinte, merită să adăugați și să vă configurați toate „e-mailurile” o dată și va fi posibil să le gestionați într-o singură fereastră fără a introduce constant un nume de utilizator și o parolă.

Serviciile de e-mail ne oferă un spațiu de stocare imens pentru toate e-mailurile primite, o interfață ușor de utilizat, o funcționalitate bună de gestionare și multe altele. Pentru a testa capacitățile serviciilor de corespondență enumerate, vom evidenția trei parametri pentru evaluarea activității acestora: 1) este necesară gestionarea diferitelor conturi de e-mail, inclusiv de pe diverse servicii și site-uri, printr-un singur client de e-mail; 2) să aibă o semnătură și un nume personal pentru fiecare corespondență; 3) ștergeți scrisorile de pe serverele acelor conturi de e-mail care au fost adăugate la mail, yandex sau google mail.

Sarcina noastră arată astfel:

Asadar, haideti sa începem. Suntem primii care testează serviciul de la Mail.ru, care ne spune: „Puteți colecta corespondența din toate căsuțele dvs. poștale într-o singură cutie poștală pe Mail.ru.

Configurați colecția de e-mailuri de pe orice server folosind protocolul IMAP sau POP3." Pentru a adăuga e-mailuri externe, altele decât @mail, @inbox, @list, @bk, trebuie să aveți cel puțin o e-mail care este deja disponibilă pe serverele listate din mail. Cu alte cuvinte, înregistrați mai întâi e-mail-ul, apoi adăugați alte conturi de e-mail. Procesul de înregistrare pentru e-mail este simplu, nu are sens să îl descriem, dar vom descrie adăugarea altor e-mailuri la acest cont de e-mail.

În continuare, vi se va solicita să introduceți datele de conectare și parola din orice căsuță poștală pe care o utilizați, iar în 3-5 minute „Colector de e-mail din e-mail” va crea un folder cu numele e-mailului adăugat lângă folderele „Inbox”. „trimis”, „spam” și altele.

De fapt, colectorul de scrisori va începe să funcționeze în 10-15 minute și va adăuga toate literele în folderul nou creat din căsuța poștală pe care ați specificat-o. Toate scrisorile primite pentru un nou e-mail vor ajunge în acest folder, de asemenea, va deveni posibilă trimiterea scrisorilor din căsuța poștală atașată. La crearea unei noi scrisori, va apărea câmpul „De la”, în care puteți selecta din ce căsuță poștală va fi trimisă scrisoarea.

Avantajele serviciului de poștă Mail.ru includ simplitatea adăugării și ușurința configurării altor cutii poștale, absența necesității de a specifica diverse protocoale (POP3, SMTP). Acest lucru este foarte important pentru că nu fiecare utilizator știe ce este.

Dezavantajele Mail.ru sunt că este imposibil să atribuiți un nume și semnătură pentru fiecare e-mail nou adăugat (orice e-mail nou, cu excepția celui principal), adică numele și semnătura e-mailului principal vor fi distribuite la fiecare adresa si gata. Un alt mare dezavantaj este că atunci când încărcați mesaje pe e-mail, nu există nicio modalitate de a șterge automat mesajele originale de pe serverul de cutie poștală atașat. De ce este atât de important să ștergeți mesajele de pe serverul căsuței poștale adăugate? Acest lucru va evita completarea e-mailului atașat, deoarece conturile de e-mail externe sunt de obicei prea mici pentru a stoca e-mailuri. De exemplu, dacă spațiul de e-mail dintr-un cont extern este plin, Mail.ru nu va afișa nicio literă nouă până când nu intrați în interfața de e-mail externă și ștergeți direct literele de acolo pentru a elibera spațiu. În plus, legăm corespondența la Mail în speranța de a obține mult spațiu de stocare pentru e-mailul nostru, care poate fi limitat de resursele de găzduire. Astfel, în ciuda faptului că Mail.ru oferă un volum aproape nelimitat de cutie poștală, atunci când adăugați e-mail din altă zonă de domeniu (de exemplu, [email protected]), resursele de e-mail adăugate nu vor crește în Mail.ru, dar vor continua să fie limitate de resursele de găzduire (în cazul nostru, resursele primer.ru).

Capacitatea de a adăuga alte e-mailuri la serviciul de e-mail nu s-a potrivit sarcinii noastre în două puncte din trei, însumând un punct.

Adevărat, Mail.ru are o altă modalitate de a adăuga corespondență externă, sau mai precis, de conectare sau de autentificare la e-mail extern. Arata cam asa:

Această metodă nu este potrivită pentru sarcina noastră, deoarece nu este un colector de e-mail, ci un mod de utilizator care se conectează la e-mail și încarcă de fiecare dată toate folderele și scrisorile în interfața de e-mail. Dar aici este posibil să adăugați o semnătură personală și un nume pentru fiecare e-mail, este posibil să trimiteți scrisori din e-mailul configurat. Ștergerea mesajelor din cutiile poștale încărcate nu funcționează, deoarece nu este un colector de corespondență.

Important! Unii utilizatori cred în mod eronat că, dacă literele sunt afișate în poștă, atunci e-mailul din care a avut loc descărcarea poate fi șters. Rețineți că Mail.ru funcționează ca vizualizator de e-mail, iar dacă ștergeți e-mailul, acesta va fi șters atât în ​​căsuța poștală principală, cât și în e-mail.

Al doilea subiect de testare este Yandex cu colectorul său de corespondență. Sarcinile sunt similare: colectarea e-mailurilor, atribuirea unei semnături și nume pentru fiecare e-mail și ștergerea tuturor e-mailurilor din căsuța poștală adăugată.

Colectorul de corespondență Yandex este configurat într-un mod similar, dar dacă e-mailul este conectat de la un site, de exemplu site.ru, atunci vor trebui specificate setări suplimentare, consultați captura de ecran.

Serviciul de e-mail a făcut această treabă pentru noi, în timp ce Yandex oferă să setați manual toate setările din e-mailul terță parte. Nu este nimic complicat aici: în câmpul de autentificare, introduceți numele complet al e-mailului ( [email protected]), în câmpul server, introduceți doar domeniul (site.ru), este mai bine să lăsați toate celelalte setări implicit sau să schimbați dacă știți ce faceți. După adăugarea cu succes a e-mailului, va apărea următorul mesaj:

Spre deosebire de Mail collector, Yandex oferă să aleagă dacă să salveze sau nu originalele scrisorilor în cutia poștală adăugată. În orice altceva, colectorul de corespondență Yandex funcționează într-un mod similar cu Mail.ru, este posibil să selectați o cutie poștală din care să trimiteți o scrisoare. Dar Yandex are aceeași problemă cu semnătura literelor: nu există nicio modalitate de a seta un nume și o semnătură individuale pentru fiecare cutie poștală adăugată.

Judecând după navigare, există posibilitatea de a adăuga o semnătură individuală pentru fiecare cutie poștală, dar în realitate nu funcționează. Selectăm e-mailul, notăm numele și semnătura, facem clic pe salvare. Gata, semnătura este salvată și funcționează, dar este salvată și pentru toate celelalte căsuțe poștale, adică atribuind un nume și semnătură unei căsuțe poștale, modificați automat acești parametri în toate e-mailurile combinate în Yandex. Chiar dacă selectați orice altă casetă, semnătura va fi acum aceeași peste tot.

În total, Yandex a făcut față cu succes colectării și sortării corespondenței, poate șterge originalele scrisorilor din cutia poștală adăugată, dar nu poate lucra cu semnăturile! Colectorul de corespondență de la Yandex nu a făcut față sarcinii noastre și obține două puncte din trei.

Aș dori să remarc că, după ce a „scotrocit” în toate cele trei servicii de asamblare a scrisorilor, se pare că Mail și-a „palmuit” funcționalitatea în grabă. Deși îi va mulțumi pe cei mai mulți utilizatori, pentru a fi sincer, Mail a făcut un colector de corespondență pentru spectacol, pentru a verifica cursa competitivă. Totul funcționează bine și fără eșecuri, dar colecționarul de la Mail nu a făcut față sarcinii noastre. Există mai multe unități de anunțuri în interfața de e-mail, dar acestea nu interferează cu lucrul cu scrisorile.

În ceea ce privește Yandex, care a creat colectorul de scrisori cu mult timp în urmă, se pare că această industrie anume nu este acceptată, deoarece repararea unei funcționalități atât de simple (capacitatea de a adăuga semnături multiple pentru cutiile poștale) nu ar trebui să fie dificilă pentru o căutare atât de puternică. motor. Cu toate acestea, Yandex are o altă funcționalitate unică care vă permite să legați domenii la serverele lor DNS, apoi să creați și să configurați e-mail. Dar astfel de operațiuni și setări necesită cunoștințe și timp. Și, deși nu este nimic complicat acolo, în orice caz, nu este pentru majoritatea utilizatorilor de internet rusesc. Mare avantaj- fără anunțuri în interfața de e-mail Yandex! Minus- Limitați în colectorul de scrisori la 10 cutii poștale.

Finalistul și câștigătorul este un colecționar de scrisori de la Google, care a făcut față sarcinii noastre cu o explozie, în ciuda chiar și limita de 5 cutii

Desigur, totul ar trebui să fie paralelizat. Aici intervine biblioteca mea preferată TPL DataFlow.

Vom colecta corespondența folosind POP3. Toate „lucrurile la modă” ale IMAP din această sarcină sunt de prisos - trebuie să ridicați sursa scrisorii cât mai repede și ușor posibil și să o ștergeți de pe server. POP3 este suficient pentru ochii de aici. Folosim OpenPop.NET.

Ca o caracteristică opțională, vom înăspri monitorizarea în Zabbix. (Vom lucra 24/7 și vom oferi viteza lăudată - trebuie să monitorizați acest lucru).

Merge

Să creăm o aplicație de consolă obișnuită. Deschideți consola NuGet și instalați toate pachetele necesare:

Pachetul de instalare Nlog Pachetul de instalare OpenPop.NET Pachetul de instalare TopShelf Pachetul de instalare Microsoft.TPL.DataFlow
Accesați folderul proiectului, creați App.Debug.config și App.Release.config. Descărcați proiectul din studio, deschideți codul acestuia (În continuare, TopCrawler.csproj). Adăugați la secțiunea cu configurația:

Configurații

App.config App.config


Și mai jos este ținta personalizată pentru MSBuild:

Transformați ținta

$ (TargetFileName) .config


Personal, m-am obișnuit în acest fel - la modă veche - pentru a adăuga transformarea configurațiilor în medii separate.
Pentru comoditate, sugerez configurații de tip puternic. O clasă separată va citi configurația. (Puteți vorbi despre aspectele teoretice ale unei astfel de soluții în comentarii). Configurațiile, jurnalele, monitorizarea sunt un motiv excelent pentru a implementa modelul Singleton.

Creați un folder cu același nume în proiect (trebuie să existe o comandă). În interior, creăm 3 clase - Config, Logger, Zabbix. Loggerul nostru:

Logger

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


Monitorizarea cu Zabbix merită o postare separată, așa că voi lăsa clasa care implementează agentul aici:

Zabbix

spațiu de nume TopCrawler.Singleton (///

/// Singleton: clasa expeditorului zabbix /// static class Zabbix (public static ZabbixSender Sender (get; private set;) static Zabbix () (Sender = nou ZabbixSender (Config.ZabbixServer, Config.ZabbixPort);)) struct ZabbixItem (public string Value; public string Key; public string ; ) clasa ZabbixSender (structură internă SendItem (// ReSharper dezactivează InconsistentNaming - Zabbix este gazdă publică sensibilă la majuscule; cheie publică șir; valoare publică șir; ceas public șir; // ReSharper restaurare InconsistentNaming) #pragma warning dezactivează 0649 structura internă ZabbixResponse ( șir public Răspuns; șir public Informații;) #pragma warning restaurare 0649 #region --- Constante --- public const șir DefaultHeader = "ZBXD \ x01"; public const șir SendRequest = "date expeditorului"; public const int DefaultTimeout = 10000 ; #endregion #region --- Câmpuri --- private readonly DateTime _dtUnixMinTime = DateTime.SpecifyKind (nou DateTime (1970, 1, 1), DateTimeKind.Utc); private readonly int _timeout; șir privat de numai citire _zabbixserver; private readonly int _zabbixport; #endregion #region --- Constructori --- public ZabbixSender (șir zabbixserver, int zabbixport): this (zabbixserver, zabbixport, DefaultTimeout) () public ZabbixSender (șir zabbixserver, int zabbixport, int timeout) (_zabbixserver = zabbixport zabbixport; = timeout;) #endregion #region --- Metode --- șir public SendData (ZabbixItem itm) (return SendData (listă nouă) (1) (itm)); ) șir public SendData (List lstData) (încercați (var serializer = nou JavaScriptSerializer (); var values ​​​​= listă nouă (lstData.Count); values.AddRange (lstData.Select (itm => new SendItem (gazdă = itm.Host, cheie = itm.Key, valoare = itm.Value, ceas = Math.Floor) ((DateTime.Now.ToUniversalTime () - _dtUnixMinTime). TotalSeconds) .ToString (CultureInfo.InvariantCulture)))); var json = serializer.Serialize (nou (cere = SendRequest, data = values.ToArray ())); var header = Encoding.ASCII.GetBytes (DefaultHeader); var length = BitConverter.GetBytes ((lung) json.Length); var data = Encoding.ASCII.GetBytes (json); var pachet = octet nou; Buffer.BlockCopy (header, 0, pachet, 0, header.Length); Buffer.BlockCopy (lungime, 0, pachet, antet.Lungime, lungime.Lungime); Buffer.BlockCopy (date, 0, pachet, antet.Lungime + lungime.Lungime, date.Lungime); folosind (var socket = socket nou (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) (socket.Connect (_zabbixserver, _zabbixport); socket.Send (pachet); // Header var buffer = octet nou; ReceivData (socket) , buffer, 0, buffer.Length, _timeout); dacă (DefaultHeader! = Encoding.ASCII.GetString (buffer, 0, buffer.Length)) aruncă o nouă excepție („Antet invalid”); // Lungimea mesajului buffer = octet nou ; ReceivData (socket, buffer, 0, buffer.Length, _timeout); var dataLength = BitConverter.ToInt32 (buffer, 0); if (dataLength == 0) aruncă o nouă excepție („Lungimea datelor invalidă”); // Buffer de mesaj = octet nou; ReceivData (socket, buffer, 0, buffer.Length, _timeout); răspuns var = serializer.Deserialize (Encoding.ASCII.GetString (buffer, 0, buffer.Length)); return string.Format ("Răspuns: (0), Info: (1)", răspuns.Răspuns, răspuns.Info); )) catch (Excepție e) (șir de returnare.Format ("Excepție: (0)", e);)) private static void ReceivData (Socket pObjSocket, byte buffer, int offset, int size, int timeout) (var startTickCount = Environment.TickCount; var primit = 0; face (dacă (Environment.TickCount> startTickCount + timeout) aruncați o nouă excepție TimeoutException (); încercați (received + = pObjSocket.Receive (buffer, offset + primit, dimensiune - primit, SocketFlags.None) ;) catch (SocketException ex) (dacă (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) Thread throwleep; 30);received; 30);< size); } #endregion } }


Configurații... E timpul să faci măcar ceva interesant. În primul rând, vom stoca casetele pe care le interogăm în configurații. În al doilea rând, setările DataFlow. sugerez asta:

Configurații



Deci, gazda și portul unde se conectează, utilizatorul și parola - totul este clar aici. Urmează tipul de cutie. Să presupunem că serviciul este utilizat de marketing (precum și de alte departamente). Au cutii poștale în care răspunsurile automate la e-mailuri sunt aruncate, precum și rapoarte de spam FBL. Cutia poștală în sine clasifică deja scrisoarea, prin urmare, pentru astfel de situații, setăm imediat tipul cutiei poștale. Cu setările DataFlow, va fi clar mai târziu când începem să creăm obiecte. Aici vom avea propriile noastre secțiuni în config. Există o mulțime de manuale despre cum să faci asta, așa că voi arăta doar rezultatul:

Definirea tipurilor

#region --- Tipuri --- static class MailboxType (șir const public Bo = "bo"; șir public const Crm = "crm"; șir public const Fbl = "fbl"; șir public const Bounce = "bounce";) class MailboxInfo (șir public Tip (get; set;) public șir Nume gazdă (get; set;) public șir Utilizator (get; set;) public șir Parolă (get; set;) public int Port (get; set;)) clasă DataBlockOptions (public int Maxdop (get; set;) public int BoundedCapacity (get; set;) public DataBlockOptions () (Maxdop = 1; BoundedCapacity = 1;)) #endregion


Creați secțiuni

///

/// Secțiune de configurare personalizată /// clasă publică CustomSettingsConfigSection: ConfigurationSection (public CredentialsCollection CredentialItems (get (retur baza ["CredentialsList"] ca CredentialsCollection;)) public DataBlockOptionsCollection DataFlowOptionsItems (get (retur baza ["DataFlowOptionsList)"] ca DataBlockOptionsListOp;


///

/// Colecție personalizată - listă de acreditări /// clasă publică CredentialsCollection: ConfigurationElementCollection, IEnumerable (protected override ConfigurationElement CreateNewElement () (return new CredentialsElement ();) protected override object GetElementKey (element ConfigurationElement) (return ((CredentialsElement) element) .Username;) public CredentialsElement this (get (return BaseGet (index) as CredentialsElement;) ) public nou IEnumerator < Count; i++) { yield return BaseGet(i) as CredentialsElement; } } } /// /// Element de acreditări personalizate /// clasă publică CredentialsElement: ConfigurationElement (șir public Nume gazdă (get (bază de returnare [„nume gazdă”] ca șir;)) șir public Nume utilizator (get (bază de returnare [„nume utilizator”] ca șir;)) șir public Parolă (obține (bază de returnare) [„parola”] ca șir;)) șir public Tip (get (return base [„type”] ca șir;)) public șir Port (get (return baza [„port”] ca șir;))) /// /// Colectare personalizată - Lista de opțiuni DataBlock /// clasă publică DataBlockOptionsCollection: ConfigurationElementCollection, IEnumerable (protected override ConfigurationElement CreateNewElement () (return new DataBlockOptionsElement ();) protejat override object GetElementKey (ConfigurationElement element) (return ((DataBlockOptionsElement) element) .Name;) public CredentialsElement this (get (return BaseGet (element) ca CredentialsElement;) ) public nou IEnumerator GetEnumerator () (pentru (var i = 0; i< Count; i++) { yield return BaseGet(i) as DataBlockOptionsElement; } } } /// /// Element de opțiuni personalizate DataBlock /// clasă publică DataBlockOptionsElement: ConfigurationElement (șir public Nume (get (baza de returnare ["nume"] ca șir;)) șir public Maxdop (get (bază de returnare ["maxdop"] ca șir;)) șir public BoundedCapacity (get (bază de returnare) ["boundedcapacity"] ca șir;)))


Nu voi scrie implementarea completă a configurației, se presupune că în timpul procesului de dezvoltare vor fi adăugați acolo parametrii de care avem nevoie.

Să citim setările noastre personalizate astfel:

Citit

Lista publică CredentialsList (obține; set privat;) Dicționar public DataFlowOptionsList (get; private set;) ... static Config () (încercați (var customConfig = (CustomSettingsConfigSection) ConfigurationManager.GetSection ("CustomSettings")); // Obțineți cutii poștale pentru fiecare (var element în customConfig.CredentialItems) CredentialsList.Add ( new MailboxInfo (Hostname = item.Hostname, Port = Convert.ToInt32 (item.Port), User = item.Username, Type = item.Type, Password = item.Password)); // Obține setările DataFlow pentru fiecare (var element în customConfig.DataFlowOptionsItems) DataFlowOptionsList.Add (item.Name, nou DataBlockOptions (Maxdop = Convert.ToInt32 (item.Maxdop), BoundedCapacity = Convert.ToInt32 (item.BoundedCapacity))));) catch (Excepție excepție) (Logger Fatal) Eroare la citirea config: (0)", ex.Message); arunca;))


Cumva se dovedește foarte prelungit și nici măcar nu am ajuns la cel mai interesant.

Deocamdată, să omitem legarea TopShelf, contoarele de performanță, comunicarea cu baza de date și să trecem la treabă! Creăm clasa Crawler - nucleul. Mai întâi, citim e-mailul:

Private volatile bool _stopPipeline; ... public void Start () (do (var getMailsTasks = _config.CredentialsList.Select (acreditări => Task.Run (() => GetMails (acreditări))). ToList (); foreach (var sarcină în getMailsTasks) sarcină .Wait (); Thread.Sleep (2000);) while (! _StopPipeline); // Opriți conducta - așteptați finalizarea tuturor punctelor finale // Aceasta va opri conducta DataFlow dacă (_stopPipeline) Logger.Log.Warn ("Pipeline) a fost oprit de utilizator ");)
Aici lenea și-a luat amploarea și am decis să nu mă deranjez - dacă există aproximativ 20-30 de cutii, puteți rula o sarcină pentru fiecare și nu vă faceți griji pentru numărul de fire. (Dă-mi voie să fac un duș cu roșii.)

Să trecem la lectura în sine:

Private void GetMails (informații MailboxInfo) (încercați (folosind (var client = nou Pop3Client ()) (
Să calculăm imediat momentele de acces la cutia poștală - utile pentru diagnosticarea rețelei și a încărcării serverului.

// Obține valorile Zabbix var cronometru = cronometru nou (); cronometru.Start (); // Obține numărul de e-mail client.Connect (info.Hostname, info.Port, false); client.Autentificare (info.Utilizator, info.Parola); cronometru.Stop ();
Trimiterea datelor către Zabbix. Este simplu - specificăm numele de gazdă (cum este în Zabbix), cheia (din nou, strict, ca în Zabbix) și valoarea șirului.

// Trimite-l către Zabbix Zabbix.Sender.SendData (nou ZabbixItem (Gazdă = Config.HostKey, Key = info.Type + Config.TimingKey, Value = cronometru.ElapsedMilliseconds.ToString ())); Logger.Log.Debug ("Trimite [(0)] cronometrare la Zabbix: conectat la" (1) "ca" (2) ", sincronizare (3) ms", info.Type, info.Hostname, info.User, cronometru.ElapsedMillisecunde); var count = client.GetMessageCount (); dacă (număr == 0) return; Logger.Log.Debug ("Noi" avem mesaje noi (0) în "(1)" ", count, info.User); // Trimiteți mesaje către blocul de sortare pentru (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);
Conducta DataFlow va fi creată atunci când este creată clasa Crawler. Credem că primul nostru pas este să sortăm scrisoarea.

În timp ce (! _SortMailDataBlock.Post (mailInfo)) Thread.Sleep (500);
Vedeți cât de simplu este - transportorul în sine este unul. Toate sarcinile care citesc e-mailuri trimit mesaje acolo unul câte unul. Dacă blocul este ocupat, Post va reveni false și vom aștepta până când este liber. Transpirația actuală continuă să funcționeze în acest moment. Aceasta este ceea ce eu numesc concurență fără griji.

Mesajul a ajuns la transportor, acum îl puteți salva într-o arhivă RAW cu liniște (da, tot ce citim - îl salvăm într-o arhivă de fișiere. Serviciul de asistență ne va mulțumi mai târziu).

Să setăm, de exemplu, rotația arhivei:

NLog.config



Apoi puteți seta logStash pe el, dar asta este o altă poveste...

// Salvați fiecare e-mail în arhiva Logger.Log.Debug ("Arhivați mesajul"); Logger.Archive.Info (Functions.MessageToString (mailInfo.Mail)); ) catch (excepție ex) (Logger.Log.Error ("Eroare de analizare a e-mailului: (0)", ex.Message); Functions.ErrorsCounters.Increment (); // Arhivează oricum e-mailul Logger.Log.Debug ("Arhivează mesajul "); Logger.Archive.Info (Encoding.Default.GetString (client.GetMessageAsBytes (i + 1)));) if (_config.DeleteMail) client.DeleteMessage (i + 1); if (_stopPipeline) break; ) Logger.Log.Debug ("Terminat cu" (0) "", info.User); )) catch (Excepție ex) (Logger.Log.Error ("Eroare generală - tip: (0), mesaj: (1)", ex, ex.Message); Functions.ErrorsCounters.Increment ();))
Aici am folosit contoare de erori statice (în ceea ce privește tipurile de casete), unde ErrorsCounters sunt:

Dicţionar public static ErrorsCounters = dicţionar nou ();
Și contoarele în sine pot fi făcute astfel:

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 (valoare lungă) (Interlocked.Add (ref _counter, valoare);) public void Set (valoare lungă) (Interlocked.Exchange (ref _counter, valoare);))


Să trecem la crearea unei conducte. Să presupunem că avem casete în care sunt turnate răspunsurile automate. Astfel de scrisori trebuie analizate (ce fel de răspuns automat, de la cine, după ce listă de corespondență etc.) și să pună rezultatul în stocare (DB). Să presupunem că există casete în care cad rapoartele FBL. Adăugăm astfel de scrisori în baza de date deodată. Considerăm că toate celelalte scrisori sunt „utile” - ar trebui verificate pentru spam și trimise la un sistem extern, de exemplu, CRM.

După cum ați înțeles deja, acest exemplu ia în considerare în principal utilizarea colectorului pentru sarcini de marketing - colectarea de statistici privind livrarea e-mailului, informații despre spam.

Deci, ne-am hotărât asupra fluxului de lucru. Declarăm blocurile necesare în clasa Crawler:

Clasa MessageInfo (public bool IsSpam (get; set;) public Message Mail (get; set;) public șir Subtip (get; set;) public șir Destinatar (get; set;) public MessageType (get; set;) public MailboxInfo Cutie poștală (get; set;)) clasă Crawler (// Pipeline private TransformBlock _sortMailDataBlock; TransformBlock privat _spamFilterDataBlock; TransformBlock privat _checkBounceDataBlock; TransformBlock privat _identificareDataBlock; ActionBlock privat _addToCrmDataBlock; ActionBlock privat _addToFblDataBlock; ActionBlock privat _addToBounceDataBlock; ...
Creăm o metodă de inițializare și creăm blocuri pipeline (folosim secțiunile noastre minunate din configurații pentru a inițializa blocurile):

Public void Init () (// *** Creați pipeline *** // Creați TransformBlock pentru a obține tipul de mesaj var blockOptions = _config.GetDataBlockOptions ("_ sortMailDataBlock"); _sortMailDataBlock = nou TransformBlock (mail => SortMail (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați TransformBlock pentru a filtra spam-ul blockOptions = _config.GetDataBlockOptions ("_ spamFilterDataBlock"); _spamFilterDataBlock = nou TransformBlock (mail => FilterSpam (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați TransformBlock pentru a sorta respingerile blockOptions = _config.GetDataBlockOptions ("_ checkBounceDataBlock"); _checkBounceDataBlock = nou TransformBlock (mail => BounceTypeCheck (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați TransformBlock pentru a identifica proprietarul de respingere blockOptions = _config.GetDataBlockOptions ("_ identificDataBlock"); _identifyDataBlock = nou TransformBlock (mail => GetRecipient (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați ActionBlock pentru a trimite mesaje către CRM blockOptions = _config.GetDataBlockOptions ("_ addToCrmDataBlock"); _addToCrmDataBlock = nou ActionBlock (mail => AddToCrm (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați ActionBlock pentru a trimite FBL către MailWH blockOptions = _config.GetDataBlockOptions ("_ addToFblDataBlock"); _addToFblDataBlock = nou ActionBlock (mail => AddToFbl (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity)); // Creați ActionBlock pentru a trimite Bounce către MailWH blockOptions = _config.GetDataBlockOptions ("_ addToBounceDataBlock"); _addToBounceDataBlock = nou ActionBlock (mail => AddToBounce (mail), nou ExecutionDataflowBlockOptions (MaxDegreeOfParallelism = blockOptions.Maxdop, BoundedCapacity = blockOptions.BoundedCapacity));
Asamblam transportorul în conformitate cu schema noastră:

// *** Build pipeline *** _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 * /
După cum puteți vedea, totul este extrem de simplu - conectăm blocul cu următorul (cu posibilitatea de a seta starea conexiunii). Toate blocurile sunt executate în paralel. Fiecare bloc are un grad de paralelism și capacitate (folosind capacitatea, puteți ajusta coada înainte de bloc, adică blocul a primit un mesaj, dar nu este încă procesat). Astfel, puteți seta un grad ridicat de paralelism pentru operațiuni „complexe” și consumatoare de timp, cum ar fi analizarea conținutului de e-mail.

Nu voi descrie materialul DataFlow, este mai bine să citiți totul în sursa originală TPL DataFlow.

SortMailDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _spamFilterDataBlock) .Fault (t.Exception); else _spamFilterDataBlock.Complete ();)); _sortMailDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _addToFblDataBlock) .Fault (t.Exception); else _addToFblDataBlock.Complete ();)); _sortMailDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _checkBounceDataBlock) .Fault (t.Exception); else _checkBounceDataBlock.Complete ();)); _spamFilterDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _addToCrmDataBlock) .Fault (t.Exception); else _addToCrmDataBlock.Complete ();)); _checkBounceDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _identifyDataBlock) .Fault (t.Exception); else _identifyDataBlock.Complete ();)); _identifyDataBlock.Completion.ContinueWith (t => (dacă (t.IsFaulted) ((IDataflowBlock) _addToBounceDataBlock) .Fault (t.Exception); else _addToBounceDataBlock.Complete ();)); )
Totul, de fapt, conducta funcționează deja, puteți posta mesaje la el. Rămâne doar să-l opriți adăugând metoda noastră Start:

start

public void Start () (do (var getMailsTasks = _config.CredentialsList.Select (acreditări => Task.Run (() => GetMails (acreditări))). ToList (); foreach (var sarcină în getMailsTasks) task.Wait ( ); Thread.Sleep (2000);) while (! _StopPipeline); // Oprire conductă - așteptați finalizarea tuturor punctelor finale _sortMailDataBlock.Complete (); _addToCrmDataBlock.Completion.Wait (); _addToFblDataBlock.Completion.Wait (); _addToCrmDataBlock.Completion.Wait (); _addToFblDataBlock.Completion.Wait (); _addBlock. .Completion.Wait (); if (_stopPipeline) Logger.Log.Warn ("Conducta a fost oprită de utilizator");)


Trecem la delegați.
Sortarea... Ei bine, să spunem că totul este simplu aici (avem întotdeauna timp să complicăm):

Private MessageInfo SortMail (MessageInfo mail) (comutator (mail.Mailbox.Type) (caz MailboxType.Crm: mail.Type = MessageType.GENERAL; pauză; caz MailboxType.Bounce: mail.Type = MessageType.BOUNCE; pauză; caz MailboxType. Fbl: mail.Type = MessageType.FBL; break;) return mail;)
Filtru de spam. Aceasta este pentru teme - folosește SpamAssassin.
Iată un delegat pentru tine:

Private MessageInfo FilterSpam (MessageInfo mail) (// TODO: Adaugă SpamAssassin logic return mail;)
Și cursuri pentru lucrul cu API-ul SpamAssassin (link către proiect).
Și trecem la analizarea literelor. Analizăm răspunsurile automate. Aici intervine MEF.
Creați un proiect (dll) cu interfețe pentru pluginurile noastre (Să numim Interfețe).
Adăugați interfața:

Interfață publică ICondition (șir Verificare (Message mimeMessage);) interfață publică IConditionMetadata (Tip tip (get;))
Si asta e. TopCrawler-ul nostru depinde de acest proiect și proiectul plugin îl va folosi și el.
Creați un nou proiect (și dll), denumiți-l Condiții.
Să adăugăm tipuri de răspuns automat:

#region --- Tipuri --- static class BounceType (șir const public Full = "BounceTypeFull"; public const șir Timeout = "BounceTypeTimeout"; public const șir Refused = "BounceTypeRefused"; public const șir NotFound = "BounceTypeTimeout"; public const string Inactive = "BounceTypeInactive"; public const string OutOfOffice = "BounceTypeOutOfOffice"; public const string HostNotFound = "BounceTypeHostNotFound"; public const string NotAuthorized = "BounceTypeNotAuthorized"; public conststring ManyTypeNotAuthorized
Și clasele care implementează interfața noastră:

Clasa publică ConditionNotFound1: ICondition (șir public Verificare (Message mimeMessage) (dacă (! MimeMessage.MessagePart.IsMultiPart) returnează null; const string model = "Diagnostic-Code:. + Smtp. + 550"; var regexp = nou Regex (model) , RegexOptions.IgnoreCase); return mimeMessage.MessagePart.MessageParts.Any (part => part.ContentType.MediaType == „mesaj / stare-livrare” && regexp.IsMatch (part.GetBodyAsText ()))? BounceType: null ;) ) ... clasă publică ConditionTimeout2: ICondition (return BounceType.Timeout;) ...
După cum puteți vedea, totul este despre atribute. Cu ajutorul lor vor fi încărcate pluginuri.
Ne întoarcem la proiectul nostru și încărcăm pluginurile:

Crawler de clasă (... // Plugins public IEnumerable > BounceTypeConditions (get; set;) private void LoadPlugins () (try (var container = new CompositionContainer (nou DirectoryCatalog (_config.PluginDirectory), true); container.ComposeParts (this);) catch (Exception ex) (Logger.Log) .Eroare ("Imposibil de încărcat pluginurile: (0)", ex.Message);)) ...
Tragem LoadPlugins în constructorul clasei noastre. Nu voi explica în detaliu mecanismul de încărcare - Google se va descurca mai bine.

Trecem la delegatul nostru de validare a tipului Bounce. Condițiile se vor aplica pe rând până la declanșarea primei, metoda exclusivă:

Private MessageInfo BounceTypeCheck (MessageInfo mailInfo) (încercați (foreach (var condiție în BounceTypeConditions) (var res = condition.Value.Check (mailInfo.Mail); if (res == null) continua; mailInfo.Subtype = res; Logger.Log .Depanare („Condiția de tip Bounce [(0)] declanșată pentru mesaj [(1)]”, condition.Metadata.Type, mailInfo.Mail.Headers.MessageId); break;)) catch (Excepție ex) (Logger.Log .Eroare („Nu s-a putut determina tipul de respingere pentru mesaj” (0) „: (1)”, mailInfo.Mail.Headers.MessageId, ex.Message); Logger.ErrorsCounters.Increment ();) return mailInfo;)
Astfel, dacă apare o nouă logică, este suficient să adăugați pur și simplu o nouă clasă la proiect cu pluginuri care implementează interfața noastră și - voila! Nu voi atașa un exemplu al celui de-al doilea plug-in pentru a determina expeditorul scrisorii - aceasta este deja o postare lungă (răspunsul automat a fost generat de serverul însuși, deci expeditorul trebuie, de asemenea, analizat din anteturile mesajului). scrisoare).

Nu este nimic neobișnuit cu înregistrarea rezultatelor în baza de date. De exemplu, așa:

Private void AddToBounce (MessageInfo mail) (încercați (MailWH.BounceAdd (mail); Functions.ProcessedCounters.Increment (); Functions.Log.Debug ("Trimite Bounce la MailWH");) catch (Excepție ex) (Functions.Log. Eroare ("Eroare la salvarea mesajului Bounce" (0) "la MailWH: (1)", mail.Mail.Headers.MessageId, ex.Message); Functions.ErrorsCounters.Increment ();))

BounceAdd

public static long BounceAdd (MessageInfo mesaj) (folosind (var conn = new SqlConnection (ConnectionString)) folosind (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) (Direction = ParameterDirection) (Direction); .CommandType = CommandType.StoredProcedure; cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ RawMessage", message.Mail.RawMessage)); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ Mesaj", corp)) ; cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ Subject", message.Mail.Headers.Subject ?? "")); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ MessageID", message.Mail .Headers.MessageId ?? "")); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ AddressTo", message.Mail.Headers.To.Address ?? "")); cmd.SelectComm and.Parameters.Add (nou SqlParameter ("@ AddressFrom", mesaj.Mail.Headers.From.Address ?? "")); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ DateRecieved", DateTime.Now)); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ BounceTypeSysName", (obiect) mesaj.Subtype ?? DBNull.Value)); cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ SourceFrom", (obiect) mesaj.Recipient ?? DBNull.Value)); // TODO: Adaugă ListId suport cmd.SelectCommand.Parameters.Add (nou SqlParameter ("@ ListId", DBNull.Value)); cmd.SelectCommand.Parameters.Add (outId); conn.Open (); cmd.SelectCommand.ExecuteNonQuery (); return outId.Value cât timp? ?? 0; ))


Iertați-mă că nu am timp să arăt TopShelf - postarea este deja prea umflată.

concluzii

În acest tutorial, am învățat că colectarea e-mailurilor poate fi dificilă. Nucleul dezvoltat vă permite să adăugați rapid noi pași de proces - blocuri DataFlow, fără a afecta logica existentă. Subsistemul plug-in vă permite să construiți rapid o logică de analiză asemănătoare unui script, iar DataFlow în sine paralelizează toate calculele (și avem capacitatea de a configura în mod flexibil multithreading pentru o anumită mașină). TopShelf ne oferă posibilitatea de a rula un serviciu atât în ​​modul serviciu, cât și în modul consolă pentru o depanare mai ușoară.

Fuh... Dacă este interesant, vă voi spune mai departe cum să-l puneți pe șinele integrării continue, să configurați autobuild-uri și să lansați o versiune prin VS Release Management.

Etichete: Adăugați etichete

Continui o serie de articole despre funcția de a colecta corespondența către o cutie principală de e-mail de la oricare alta situată pe orice serviciu de e-mail. În ultimul articol, am vorbit despre configurarea colecției de corespondență pe serviciul Yandex, care este la fel de ușor ca decojirea perelor. Și în acest articol voi vorbi despre cum să faci același lucru într-un alt serviciu de astăzi, nu mai puțin popular - Mail.ru, unde mulți își păstrează încă caseta de e-mail principală, în ciuda faptului că, de exemplu, serviciul GMail are clar avantaje (am descris configurarea colecției de e-mailuri în Gmail). Dar, după cum se spune, fiecăruia a lui și uneori e doar o chestiune de obicei :)

Configurarea colecției de corespondență în serviciul Mail.ru este la fel de ușoară ca, de exemplu, pe Yandex. Doar câțiva pași simpli și totul va fi gata, e-mailul va începe să curgă din cutiile poștale pe care le-ai conectat la una, pe Mail.

Procesul de configurare a colecției de corespondență în serviciul Mail.ru

În primul rând, conectați-vă la contul dvs. pe Mail, unde veți colecta corespondența din alte căsuțe de e-mail și deschideți secțiunea „Scrisori” (e-mailul se află acolo).

Acum trebuie să accesați setările de e-mail. Pentru a face acest lucru, faceți clic pe butonul „Mai multe” din partea de sus și selectați „Setări”.

De asemenea, puteți deschide setările făcând clic în colțul din dreapta sus pe adresa dvs. de e-mail și apoi selectând „Setări de e-mail”.

Apoi accesați secțiunea „Poștă din alte căsuțe poștale”.

Se va deschide prima fereastră de conectare a celei de-a doua căsuțe de e-mail.

Permiteți-mi să vă reamintesc că a doua căsuță de e-mail din care doriți să colectați scrisorile poate fi localizată pe orice serviciu, nu doar Mail!

În exemplul acestui articol, vom lua în considerare conectarea unei căsuțe poștale situate pe Yandex.

În această fereastră, trebuie să specificați numele de utilizator și parola pentru e-mailul pe care îl conectați. Dacă cutia poștală pe care o conectați se află pe unul dintre serviciile enumerate mai jos, apoi faceți clic pe butonul corespunzător din partea de sus, introduceți mai jos adresa completă a e-mailului conectat și faceți clic pe „Adăugați căsuța poștală”:

Dacă cutia poștală pe care doriți să o conectați se află pe un alt serviciu (nu din lista de mai sus), atunci faceți clic pe butonul „Alte e-mailuri” din partea de sus, după care trebuie să introduceți adresa completă a e-mailului conectat, parola din el și faceți clic pe „Adăugați căsuța poștală”.

Dacă nu ați introdus încă a doua e-mail în acest browser, la care vă conectați, atunci în următoarea fereastră va trebui să introduceți numele de utilizator și parola din acesta. Exemplu:

După aceea, faceți clic pe „Permite” (permiteți ca e-mailul de pe Mail.ru să folosească unele dintre datele celui de-al doilea e-mail conectat).

Dacă totul a mers bine, veți primi un mesaj că colectorul a fost adăugat. Acum trebuie să alegeți ce folder să colectați corespondența: într-un folder special creat după numele e-mailului pe care l-ați conectat sau în căsuța de e-mail. Depinde de tine să decizi, dar, după părerea mea, este mai convenabil atunci când corespondența colectată dintr-o altă cutie poștală merge într-un folder separat. Într-un fel sau altul, atunci aceasta poate fi configurată prin filtrarea literelor.

Opțiunea „Aplicați filtre la e-mailurile primite” înseamnă că toate filtrele pe care le-ați configurat deja în e-mailul principal pe Mail se vor aplica și e-mail-urilor primite de la căsuța poștală conectată. Dezactivarea sau nu depinde de dvs.

Gata, colectorul de scrisori este pus la punct! Acum, în câteva minute (uneori procesul este întârziat dacă există o mulțime de litere pe e-mailul conectat), e-mailul din a doua căsuță poștală va începe să curgă în cea principală.

În acest fel, puteți conecta câte e-mailuri doriți să colectați.

Cum să vezi separat toate scrisorile din e-mailul conectat?

Puteți privi separat scrisorile dacă, atunci când configurați colectarea e-mailurilor în Mail, ați indicat că scrisorile ar trebui să fie colectate într-un folder separat cu numele căsuței poștale conectate. În acest caz, deschideți acest folder și veți vedea toate literele de care aveți nevoie. Exemplu:

Dacă nu ați configurat imediat primirea scrisorilor într-un folder separat, îl puteți configura oricând deschizând colectorul creat (mai multe despre asta mai jos).

Configurarea colectorului de scrisori creat, dezactivarea și activarea acestuia

Uneori este posibil să fie nevoie să faceți modificări la setările colectorului de e-mail pe care l-ați creat în Mail și, de asemenea, să îl dezactivați sau să îl activați din nou.

Acest lucru se poate face în aceeași secțiune „Setări” - „Poștă din alte cutii poștale”, unde ați creat inițial colectorul de e-mail.

Aici veți vedea colectorul generat. Dacă doriți să îl opriți sau să îl porniți din nou, faceți clic pe comutatorul corespunzător. Dacă trebuie să deschideți setările colectorului, faceți clic pe „Modificați”.

Și se vor deschide aceleași setări pentru colectorul de scrisori, ca și în etapa creării sale (vezi).

Top articole similare