![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как проверить, существует ли определенный e-mail или нет? [D5, Win95/98]
Belg © (2002-06-18 07:31:00)Заранее спасибо!
S@shka (2002-06-25 17:25:00) [1]Вопрос весьма и весьма интересен.
один из вариантов это как уже упоминули залогиниться
однако некоторые сервера могут этого и не разрешать.
Вариант 2. создаешь себе ящик аля@newmail.ru
и от его имени шлешь мыло естественно если мыло ушло в никуда вернется сообщение MailDelivery failed и по ним и можно смотреть что реально а что нет.
VDen (2002-06-21 14:08:00) [2]Проверить можно лишь существование соответствующего сервера.
Так, fgh@kjl.ytu окажется адресом неправильным.
Но вот для адреса no_such_account@mail.ru проверка без контакта с адресатом скорее всего невозможна.
Anatoly Podgoretsky (2002-06-21 11:42:00) [3]Послать письмо, вреоятность определения близка к 100%, остальные методы вероятность стремится к нулю.
Ocean (2002-06-21 11:31:00) [4]Вообще-то не знаю, но пришла мысль такая. Попробовать залогиниться по SMTP на почтовый сервер с этим именем, т.е. тем, что идет до "@". Понимаю, что есть еще алиасы, не подскажу сразу, как точно определить название сервера, но - тема для размышления.
Malder (2002-06-18 13:27:00) [5]Хех. Во первых, имелось в виду немного не то. Тут идет проверка на допустимые символы в адресе. А ведь даже если все верно - такого адреса может не существовать. Проверка на существование e-mail вообще невозможна.
Во вторых, здесь проверка на правильность e-mail также осуществлена неверно. Хотя бы то, что в адрес e-mail вовсе не обязательно должен входить знак "@".
MARcoDEN (2002-06-18 07:32:00) [6]Вот код функции:
function IsValidEmail(const Value: string): boolean;
function CheckAllowed(const s: string): boolean;
var
i: integer;
begin
Result:= false;
for i:= 1 to Length(s) do
begin
{ недопустимый символ в s - значит недопустимый адрес }
if not (s[i] in ["a".."z", "A".."Z", "0".."9", "_", "-", "."]) then
Exit;
end;
Result:= true;
end;
var
i: integer;
namePart, serverPart: string;
begin // начало выполнения IsValidEmail
Result:= false;
i:= Pos("@", Value);
if i = 0 then
Exit;
namePart:= Copy(Value, 1, i - 1);
serverPart:= Copy(Value, i + 1, Length(Value));
// @ не указано имя имя или сервер не указаны; минимально для сервера. "a.com"
if (Length(namePart) = 0) or ((Length(serverPart) < 5)) then
Exit;
i:= Pos(".", serverPart);
// должно иметь точку и как минимум три знака от конца
if (i = 0) or (i > (Length(serverPart) - 2)) then
Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;