source: trunk/Packages/synapse/source/demo/MailCheck/mailchck.pas

Last change on this file was 2, checked in by chronos, 12 years ago
  • Přidáno: Základní kostra projektu.
  • Přidáno: Knihovna synapse.
File size: 2.5 KB
Line 
1unit mailchck;
2
3interface
4
5uses
6 dnssend, smtpsend, synautil, classes, synamisc;
7
8function mailcheck(email:string):integer;
9
10implementation
11
12{
130 - address exists
141 - address may exists
152 - your DNS nannot working (cannot check!)
163 - your DNS is not defined (cannot check!)
174 - cannot contact any MX servers (cannot check!);
185 - domain not have MX record
196 - address not exists
207 - address is bad!
21}
22
23function mailcheck(email:string):integer;
24var
25 smtp:TSMTPsend;
26 domain:string;
27 user: string;
28 mailservers:tstringlist;
29 dnsservers:tstringlist;
30 x: integer;
31 n, m: integer;
32 b: boolean;
33begin
34 result:=7;
35 email:=getemailaddr(email);
36 x := pos('@', email);
37 if x <= 0 then
38 exit; //invalid address format
39 domain:=separateright(email,'@');
40 user:=separateLeft(email,'@');
41 if (domain = '') or (user = '') then
42 exit; //invalid address format
43 smtp:=tsmtpsend.create;
44 mailservers:=tstringlist.create;
45 dnsservers:=tstringlist.create;
46 try
47 dnsservers.CommaText := GetDNS;
48 result := 3;
49 if dnsservers.Count = 0 then
50 Exit; // not DNS servers defined
51 result := 2;
52 b := false;
53 for n := 0 to dnsservers.Count -1 do
54 if GetMailServers(dnsservers[n], domain, mailservers) then
55 begin
56 b := true;
57 break;
58 end;
59 if not b then
60 Exit; // DNS cannot be contacted
61 result := 5;
62 if mailservers.Count = 0 then
63 exit; // not defined MX record for requested domain
64 b := false;
65 for n := 0 to mailservers.count - 1 do
66 begin
67 smtp.TargetHost := mailservers[n];
68 if not smtp.Login then
69 Continue;
70 b := true;
71 if smtp.Verify(email) then
72 begin
73 if smtp.ResultCode < 252 then
74 begin
75 Result := 0; // user address confirmed!
76 break;
77 end;
78 end
79 else
80 if smtp.ResultCode = 551 then
81 begin
82 Result := 6; // user address not confirmed!
83 break;
84 end;
85 if not smtp.MailFrom('mailcheck@somewhere.com', 100) then
86 Continue;
87 if not smtp.MailTo(email) then
88 begin
89 Result := 6; // user address not confirmed!
90 break;
91 end
92 else
93 begin
94 Result := 1; // address MAY exists
95 break;
96 end;
97 end;
98 if not b then
99 result := 4; //cannot contact any mailserver;
100 finally
101 dnsservers.free;
102 mailservers.free;
103 smtp.free;
104 end;
105end;
106
107end.
Note: See TracBrowser for help on using the repository browser.