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.
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;
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?
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
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.
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;
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?
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
Markere begge navne i combo box inden du klikker accepter.
Synes godt om
Ny brugerNybegynder
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.