Avatar billede spil2vind Nybegynder
26. oktober 2008 - 13:19 Der er 22 kommentarer og
2 løsninger

Check om en indtastet email address exists

Hej

Jeg har brug for en funktion, der kan checke om en indtastet email eksisterer, dette er muligt på hjemmesiden
http://www.find-ip-address.org/email-lookup.php

Det er ikke nødvendigt med en validering af adressen.

Har kigget Internet og eksperten igennem uden at finde noget som kunne hjælpe.

Pft
Carsten
Avatar billede arne_v Ekspert
26. oktober 2008 - 15:58 #1
Du har læst på siden at der kun er 95% korrekthed ikke ?

Hvad kan du bruge 95% korrekthed til ?
Avatar billede arne_v Ekspert
26. oktober 2008 - 15:59 #2
Fundamentalt er der kun en pålidelig måde at checke email adresser på.

Send en email med et confirmation link til adressen.
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 17:44 #3
Ja, men det der gør at jeg ønsker at bruge en form for kontrol, er at at folk enten taster latterlige adresser ind eller laver slå fejl, selvom de skal genstage email adressen, så hvis der på nogen er en måde at checke på, enten ved brug af Indu DNS resolver og mx record opslag, har bare ikke lige nogen ide om, hvorledes jeg skal komme igang.

De adresser som er korrekte, er alle godkendt af ovenstående eller http://verify-email.org/
Avatar billede hrc Mester
26. oktober 2008 - 19:33 #4
Er det ikke lige guf for spammere, eller er de mere sofistikerede?
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 19:40 #5
Spammere opsnapper vel email på Internettet, det gider da vel ikke sidde og gætte gyldige email adresser
Avatar billede arne_v Ekspert
26. oktober 2008 - 20:10 #6
Selvfølgelig gør de det.

Men den del der er nem at checke er den efter @ og det har de jo ingen problemer med
at få fat på. Så prøver de sig frem med noget foran @.
Avatar billede arne_v Ekspert
26. oktober 2008 - 20:11 #7
function mx_lookup(dnsserver, domain : string) : string;

var
  dns : TIdDNSResolver;
  res : TMXRecord;
  tmp : TSOARecord;

begin
  try
    dns := TIdDNSResolver.Create;
    dns.Host := dnsserver;
    dns.QueryType := [qtMX];
    dns.WaitingTime := 1000;
    dns.QueryResult.Clear;
    dns.Resolve(domain);
    if dns.QueryResult.Count > 0 then begin
      if dns.QueryResult[0].RecType = qtMX then begin
        res := dns.QueryResult[0] as TMXRecord;
        result := res.ExchangeServer;
      end else if dns.QueryResult[0].RecType = qtSOA then begin
        tmp := dns.QueryResult[0] as TSOARecord;
        result := mx_lookup(tmp.Primary, domain);
      end else begin
        result := 'missing';
      end;
    end else begin
      result := 'misssing';
    end;
  except
    on EIdDnsResolverError do result := 'missing';
  end;
end;

kan slå MX record for et domæne op.
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 21:41 #8
Tak det virker fint, nu ved vi jo hvilken mail server vi skal tale med, er der nogen der har gode ideer til at komme videre, kan man på nogen måde finde udaf hvad der udføres på http://verify-email.org/, når man klikker Verify?
Avatar billede kroning Nybegynder
26. oktober 2008 - 21:48 #9
Det fremgår jo egentlig af loggen hvad der foregår
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 21:59 #10
Ja, det har du ret i, jeg ville også kunne udføre det hele manuelt, helt fra start af, ved at slå mx record op, tilslutte med telnet osv..., men har ikke rigtig nogen ide om hvorledes dette gøres med delphi, så håber nogen kan sætte mig igang
Avatar billede kroning Nybegynder
26. oktober 2008 - 22:03 #11
Jeg er ikke sikker på at sidste del med at checke om mail adressen er ok hos serveren kan ordnes med Indy, så der skal du nok manuelt oprettet en TCP (IdTCP) forbindelse til mail serveren og sende de enkelte linier.
Avatar billede kroning Nybegynder
26. oktober 2008 - 22:07 #12
Det jeg mente var at du nok ikke kan benytte TIdSMTP med skal bruge TIdTCPClient og gøre det "manuelt"
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 22:18 #13
Hvad med indy idtelnet, hvad er argumenterne for brug af denne?
Avatar billede kroning Nybegynder
26. oktober 2008 - 22:22 #14
Hvorfor vil du benytte telnet?
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 22:24 #15
Fordi det var det jeg ville vælge hvis jeg skulle løse det manuelt, så mit gæt var derfor telnet komponenten fra indy
Avatar billede kroning Nybegynder
26. oktober 2008 - 22:41 #16
Jeg har lige prøvet TIdTelnet med de første par linier og det virker fint, men jeg tror det er lettere med TIdTCPClient.
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 22:51 #17
OK, jeg har også prøvet, men fik ikke SMTP serveren svarer, den smed forbindelsen meget hurtigt.

Hvis IDTelnet, får man vel også svaret fra SMTP serveren? eller er jeg helt forkert på den?
Avatar billede kroning Nybegynder
26. oktober 2008 - 23:42 #18
Jeg smed en TIdTelnet på en form og satte Host=en host og Port=25, og 3xButtons og en Memo, og så klik på knap 1+2+3.
Men hvis man skal lave noget der virker vil det nok være en god ide at læse en RFC om SMTP.


procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
begin
    Memo1.Lines.Add(Buffer);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    IdTelnet1.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    IdTelnet1.IOHandler.WriteLn('HELO verify-email.org');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    IdTelnet1.IOHandler.WriteLn('MAIL FROM: <check@verify-email.org>');
end;
Avatar billede spil2vind Nybegynder
26. oktober 2008 - 23:51 #19
Det ligner lidt af det jeg også lavede, måske var mit problem at jeg brugte mx recorden for spil2vind.dk (mx-cluster1.one.com), måske de har lavet et eller andet som gør at kommandoer skal komme meget hurtigt efter hinanden, kigger mere på det i morgen, ellers tak for hjælpen indtil videre, prøvede du også at spørge på en ukendt RCT to?
Avatar billede kroning Nybegynder
27. oktober 2008 - 00:29 #20
Jeg prøvede kun HELO og MAIL FROM og ikke mere.
Avatar billede spil2vind Nybegynder
28. oktober 2008 - 20:53 #21
function mx_lookup(dnsserver, domain : string) : string;
var
    dns : TIdDNSResolver;
    res : TMXRecord;
    tmp : TSOARecord;
    i : integer;
begin
    try
        dns := TIdDNSResolver.Create;
        dns.Host := dnsserver;
        dns.QueryType := [qtMX];
        dns.WaitingTime := 1000;
        dns.QueryResult.Clear;
        dns.Resolve(domain);
        Tekst := '';

        if dns.QueryResult.Count > 0 then begin
            i := 0;
            repeat
              if dns.QueryResult[0].RecType = qtMX then begin
                res := dns.QueryResult[0] as TMXRecord;
                Tekst := res.ExchangeServer;
              end;
            until (Tekst <> '') or (i = dns.QueryResult.Count - 1);
            if Tekst = '' then begin
                Tekst := 'Misssing';
            end;
        end
        else begin
            Tekst := 'Misssing';
        end;
    except
      on EIdDnsResolverError do Tekst := 'Missing';
    end;
    Result := Tekst;
end;

procedure TForm2.CheckEmailButtonClick(Sender: TObject);
var
    s : string;
    i : integer;
begin
    tekst := mx_lookup(DNSServerName, copy(CheckEmailAddress.Text,pos('@',CheckEmailAddress.Text)+1,100) );
    if Tekst <> 'Missing' then begin
        IdTelnet1.Host := Tekst;
        IdTelnet1.port := 25;
        IdTelnet1.Connect;
        if IdTelnet1.Connected then begin
            S := 'HELO ' + DNSServerName;
            for i := 1 to length(s) do begin
                IdTelnet1.SendCh(s[i]);
            end;
            IdTelnet1.SendCh(#13);

            S := 'MAIL FROM: ' + DinEmailAdresse;
            for i := 1 to length(s) do begin
                IdTelnet1.SendCh(s[i]);
            end;
            IdTelnet1.SendCh(#13);

            S := 'RCPT TO: ' + CheckEmailAddress.Text;
            for i := 1 to length(s) do begin
                IdTelnet1.SendCh(s[i]);
            end;
            IdTelnet1.SendCh(#13);
            sleep(500);
            try
              IdTelnet1.Disconnect;
            except
              on EIdClosedSocket do Tekst := 'Error';

            end;
        end;
    end;
end;

Har fået sammenstykket ovenstående, som virker fint, har afprøvet det, på lidt over 1200 adresser.

Kan man give point 2 personer? Hvis ja, så smid et svar, idet jeg synes i begge har været med til løsning af opgaven
Avatar billede kroning Nybegynder
28. oktober 2008 - 20:58 #22
k
Avatar billede spil2vind Nybegynder
28. oktober 2008 - 21:04 #23
Hvordan giver man point til 2 personer?
Avatar billede arne_v Ekspert
28. oktober 2008 - 22:39 #24
Markere begge navne i combo box inden du klikker accepter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester