Eredmény: 1 - 9 (9) összesen

Téma: mail checkkerrrr

  1. #1
    ingyenfreg mza8202 logója
    Csatlakozott
    07-10-18
    Hely
    Budapest
    Hozzászólás
    167
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás mail checkkerrrr

    üdv kedves koderekkk

    tavaly összedobtam egy apró kis webservice-t ami feladata csak annyi volt, hogy email címeket ellenőrzött, mégpeedig a következő módon:

    1. domain feloldás, megnézzük hogy van e pl.: freemail.hu

    2. ha van, megkérdezzük a megtalált szervertől, hogy van e smtp szolgáltatása.

    3. ha van be hello-ztam az smtpnek és megkérdeztük a mail fiók statuszat egy apro kis maillel.

    ez elég biztosan működik egynéhány timeoutot leszámítva.
    viszont ezzel az egesz proceduraval volt egy nemiskicsi problemam. megpedig a sebessege 1 mailcim vagy 15 sec...hanem tobbb.

    erre azota sem talaltam gyorsabb megoldast, mint ahogy az elobb felvazoltam. az nslookuppal nincsenek jo tapasztalataim sebessegugyileg.

    vki vmilyen nyelvben irt mar hasonlot, vmi gyorsabban felhasznalhato dolgot?

    jo mondjuk az enyem sebesseget az is ronthatta, hogy a .net-es webservice-t egy soap kapcsolaton keresztul classic asp-bol hasznaltam.

    szoval lenyeg a lenyeg, van erre vkinek vmi ötlete, hogyan lehetne ezt nagyobb sebesseggel megvalositani?



  2. #2
    'Say Hello To My Little Friend'
    Csatlakozott
    08-06-26
    Hozzászólás
    36
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    szia! sajnos én még a kezdőbbik réteget képviselem, de ettől függetlenül megkérdezném miért kell ellenőrizni a mail cimet? mert én az oldalt ugy csinaltam meg mint a legtobb helyen, hogy meg kell erositeni a reget, amit ugye nem tud ha rossz mail cimet adott meg.. vagy erre inkabb azert lenne szukseg hogy nehogy rosszul regeljen aztan meg elfelejti hogy hova akart es nem tud visszatalalni az oldalra? amugy kozkincs az a szkript vagy licenszvedett ?



  3. #3
    ingyenfreg mza8202 logója
    Csatlakozott
    07-10-18
    Hely
    Budapest
    Hozzászólás
    167
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    Üdv!

    Anno ennek annyi feladata volt, hogy hírlevél feliratkozásnál a címeket ugyebár nem erősíttettük meg, hiszen nem volt cél, hogy a nehezen feliratkoztatott emberkéknél még csökkentsük ezt a mennyiséget megerősítéssel.

    Ezen kívül volt még olyan, hogy "öreg" címlistát kellett ellenőrizni, és nem a visszapattanók smtp status message kódjait gyűjtögettem, mert ahány smtp van, ez elég sokáig tartott volna, bár ez is lehetséges jó megoldás, de ezen kódok kategorizálása, és elbírálása hosszas, és fáradságos munka lett volna.

    Erre láttam akkor hasonló megoldást más nyelvben, és ültettem át akkor anno .net-re.

    Ebből csináltam anno egy programot, aminek volt pár verziója különböző megvalósításokkal (webservice, windows service).
    Mivel elég lassú lett a végeredmény végül nem került felhasználásra.
    Kis címlisták ellenőrzésére mittomén, pár ezer cím, azért jól használható,
    de százezres nagyságrendben ez nem a legjobb.

    Ha érdekel akkor majd publikálom ide az osztályt. Azt hiszem még 1.1-es frameworkben készült, és vb.net-ben. Ha lesz kis időm, átírom 3.5-re, c#-ba.

    A classal meg már csak elboldogulsz



  4. #4
    Törzsvendég
    Csatlakozott
    07-12-12
    Hozzászólás
    193
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    Idézet mza8202 eredeti hozzászólása Hozzászólás megtekintése
    ez elég biztosan működik egynéhány timeoutot leszámítva.
    viszont ezzel az egesz proceduraval volt egy nemiskicsi problemam. megpedig a sebessege 1 mailcim vagy 15 sec...hanem tobbb.
    Soha nem csináltam még ilyesmit, de kézenfekvőnek tűnik hogy ha pl. címlistát ellenőrzöl, akkor ne sorban csináld, hanem egyszerre többet párhuzamosan. Így, amíg az egyiknél vársz a válaszra, addig a többire küldheted a kérdést.

    Ha egy szolgáltató felé valami okból nem lehet több kapcsolatot nyitni, akkor szét lehet válogatni a címeket szolgáltatónként, és így párhuzamosítani.

    Így nem N-szer 15 sec alatt lesz kész, hanem jóval hamarabb.



  5. #5
    ingyenfreg mza8202 logója
    Csatlakozott
    07-10-18
    Hely
    Budapest
    Hozzászólás
    167
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    persze, anno en is egy tobbszalu progit kezdtem irogatni, de a lenyeg a hirlevel feliratkozonal lett volna, aztan a lassusaga miatt leallitottak a fejlesztest, es annyiban maradt.



  6. #6
    ingyenfreg mza8202 logója
    Csatlakozott
    07-10-18
    Hely
    Budapest
    Hozzászólás
    167
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    Kód:
    public class EmailTester
    {
    	public EmailTester()
    	{
    		
    	}
    
        private string GetData(NetworkStream oStream)
        {
            byte[] bResponse = new byte[1024];
            string sResponse = "";
    
            int lenStream = oStream.Read(bResponse, 0, 1024);
            if (lenStream > 0)
            {
                sResponse = Encoding.ASCII.GetString(bResponse, 0, 1024);
            }
            return sResponse;
        }
    
        private string SendData(NetworkStream oStream, string sToSend)
        {
            byte[] bArray = Encoding.ASCII.GetBytes(sToSend.ToCharArray(), 0, 1024);
            oStream.Write(bArray, 0, bArray.Length);
            return GetData(oStream);
        }
    
        private bool ValidResponse(string sResult)
        {
            bool bResult = false;
            if (sResult.Length>1)
            {
                if (Convert.ToInt32(sResult.Substring(0, 1)) < 3) {
                    bResult = true;
                }
            }
            return bResult;
        }
    
        private string TalkToServer(NetworkStream oStream, string sToSend)
        {
            return SendData(oStream, sToSend);
        }
    
        private string NSLookup(string sDomain)
        {
            Process ns = new Process();
            ns.StartInfo.UseShellExecute = false;
            ns.StartInfo.RedirectStandardInput = true;
            ns.StartInfo.RedirectStandardOutput = true;
            ns.StartInfo.FileName = "nslookup";
            ns.StartInfo.Arguments = "-type=MX " + sDomain.ToUpper().Trim();
            ns.Start();
    
            StreamReader sout = ns.StandardOutput;
            Regex reg = new Regex("mail exchanger = (?<server>[^\\\\s]+)");
            string mailserver = "";
            do
            {
                Match amatch = reg.Match(sout.ReadLine());
                if (amatch.Success)
                {
                    mailserver = amatch.Groups["server"].Value;
                    break;
                }
            } while (sout.Peek() > -1);
            return mailserver;
        }
    
        private Int16 ChatMailServer(string sEmail)
        {
            NetworkStream oStream;
            string sFrom;
            string sTo;
            string sResponse;
            string Remote_Addr;
            string mserver;
            string[] sText;
    
            sTo = "<" + sEmail + ">";
            sText = sEmail.Split('@');
            mserver = NSLookup(sText[1]);
    
            if (mserver == "")
            {
                return 4;
            }
    
            Remote_Addr = "index.com";
            sFrom = "<myIP@" + Remote_Addr + ">";
    
            using (TcpClient oConnection = new TcpClient()) {
                try {
                    oConnection.SendTimeout = 10000;
                    oConnection.Connect(mserver, 25);
                    oStream = oConnection.GetStream();
                    sResponse = GetData(oStream);
                    sResponse = TalkToServer(oStream, "HELO " + Remote_Addr + System.Environment.NewLine);
                    sResponse = TalkToServer(oStream, "MAIL FROM: " + sFrom + System.Environment.NewLine);
    
                    if (ValidResponse(sResponse))
                    {
                        sResponse = TalkToServer(oStream, "RCPT TO: " + sTo + System.Environment.NewLine);
                        if (ValidResponse(sResponse))
                        {
                            return 1;
                        }
                        else
                        {
                            return 2;
                        }
                    }
                    TalkToServer(oStream, "QUIT" + System.Environment.NewLine);
                    oConnection.Close();
                    oStream.Dispose();
                    return 3;
                }
                catch (Exception ex)
                {
                    return 3;
                }
            }
        }
    
        public string isEmail(string sEmail)
        {
            try {
                sEmail = sEmail.Trim();
                Regex re = new Regex("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
                if (re.IsMatch(sEmail))
                {
                    return ChatMailServer(sEmail).ToString();
                }
                else
                {
                    return "5";
                }
            }
            catch (Exception ex)
            {
                //return ex.ToString();
                return 6;
            }
        }
    }
    de van 1 kis problémám vele, én winserver2008-at használok a laptopomon oprendszerként, és nemigazán akaródzik az nslookup futtatása, úgyhogy nem tudtam kipróbálni a kódot, anno vb-ben futott, igaz, kicsit át kellett írnom pár dolgot, a c# konvertálás közben.

    ha vki kipróbálja, várom a fejleményeket



  7. #7
    Operálandusz
    Csatlakozott
    07-11-04
    Hozzászólás
    138
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    Ez kevésbé bevett gyakorlat, hiszen miért kéne minden levelezőszolgáltatásnak smtp-vel automatice rendelkeznie? Nem értem.

    A domain lekérdezése jó ötlet, de hogy hellózz az smtp-vel...

    Sokkal gyorsabb és biztosabb megoldás a domain MX rekordjainak lekérdezése. Amelyik domain nem bonyolít levelezést, annak fölösleges az MX-rekord. Ezzel határozottan megnő a szkripted sebessége és hatékonysága is.

    Ajánlom figyelmedbe a Zend keretrendszer erre alkalmas modulját, mely előregyártott formában áll szolgálatodra.
    http://framework.zend.com/manual/en/....email_address



  8. #8
    ingyenfreg mza8202 logója
    Csatlakozott
    07-10-18
    Hely
    Budapest
    Hozzászólás
    167
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    attól hogy van MX még semmi sem garantálja, hogy létezik a cím.
    xxxxxxxxxxxxxxxxxxxx@freemail.hu -t a megoldásod simán validálja.

    szerintem nagyobb hatékonyságú ez a megoldás, mint amit te mondasz, legalább is arra a feladatra, amire kellett használni.

    tegyük fel, van 1 címlistám, amiben van 100000 netről feliratkozott email cím.
    domain eloszlása változó, nagyrészt ingyenes szolgáltatótól(freemail, gmail, vipmail..stb.)

    ilyenkor mivel érsz többet?

    a sebesség amúgy sem lényeges, nekem nem on-the-fly ellenőrzésre kell.



  9. #9
    Operálandusz
    Csatlakozott
    07-11-04
    Hozzászólás
    138
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: mail checkkerrrr

    Idézet mza8202 eredeti hozzászólása Hozzászólás megtekintése
    attól hogy van MX még semmi sem garantálja, hogy létezik a cím.
    xxxxxxxxxxxxxxxxxxxx@freemail.hu -t a megoldásod simán validálja.
    Attól, hogy nincs smtp még semmi sem garantálja, hogy nem létezik a cím.

    Ha mocskos pockok felőrlik a kábelt, akkor értelemszerűen az adott szolgáltató smtp-je nem lesz elérhető. Az összes befutó kérés azt fogja jelenteni, hogy jónéhány (egyazon szolgáltatóhoz tartozó) e-mail cím nem létezik. Az mx-rekordok ezzel szemben permanensek.

    Komoly szolgáltatók opcionálissá (fizetőssé?) is tehetik az smtp-t, így, ha választ is kapsz a helódra/ehlódra, ominózus e-mail címet visszautasíthatják, noha létező.

    És azokkal a szolgáltatókkal mit kezdesz, amelyek nem biztosítanak smtp-t és imapot sem?

    Ha az mx-ellenőrzőt párosítod visszapattanólevél-vizslatóval, a sokx@freemail.hu címek könnyűszerrel kiszűrhetőek.

    A sebesség talán nem zavaró, ha nem menet közben akarod elvégezni. De ha a hosztingod megleli a Hozzád tartozó logot, a Természetfeletti óvjon attól, hogy kérdezés nélkül kihajítsanak spamgyanúért.



A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •