Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизКак проверить корректность E-mail на Delphi Найти похожие ветки
← →
Алексей Кононов (2002-10-31 09:27) [0]Пожалуйста помогите решить проблему.
Подскажите существует ли возможность проверить E-mail адрес перед отправкой на него письма
← →
Anatoly Podgoretsky (2002-10-31 09:38) [1]Под корректность ты что понимаешь, соответствует ли адрес стандарту или существует такой адрес или еще что.
Стандарт описан в RFC, для начала можешь считать это что nj типа xxx@yyy.zz где каждая из трех составляющих подчиняется определенным правилам, тоже относится и к разделителям.
Существование одназначно проверить нельзя, с определенной долей можно утвержать, что да если не придет отлупа от сервера, но и это не означает этого, не все сервера посылают ответ. Существуют некоторые методы опроса сервера не посылая письма, но они еще менее точные. например мой сервер тебе на любой адрес скажет, что корреспондент существует и только при получении письма сообщит, что я ошибся, нет такого, а другой и этого тебе не скажет.
← →
Алексей Кононов (2002-10-31 09:59) [2]Вот мне и хотелось как бы сэмулировать отправку письма, а уж по тому удачно это пройдет или нет судить об существовании адреса
← →
sky3d (2002-10-31 10:01) [3]Это для проверки наличия собаки, доменна и т .д.
Конечно же НЕ гарантирует доставку
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
// illegal char in s -> no valid address
if not (s[i] in ["a".."z","A".."Z","0".."9","_","-","."]) then
Exit;
end;
Result:= true;
end;
var
i: integer;
namePart, serverPart: string;
begin // of IsValidEmail
Result:= False;
i:= Pos("@", Value);
if (i = 0) or (pos("..", Value) > 0) then
Exit;
namePart:= Copy(Value, 1, i - 1);
serverPart:= Copy(Value, i + 1, Length(Value));
if (Length(namePart) = 0) // @ or name missing
or ((Length(serverPart) < 4)) // name or server missing or
then Exit; // too short
i:= Pos(".", serverPart);
// must have dot and at least 2 places from end
if (i = 0) or (i >= (Length(serverPart) - 1)) then
Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;
← →
Дмитрий К.К. (2002-10-31 10:01) [4]Мне понравилась фраза: "но и это не означает этого"
← →
sky3d (2002-10-31 10:02) [5]Сорри не видел последней реплике, так что мой ответ не в кассу
← →
Алексей Кононов (2002-10-31 10:25) [6]sky3d, все равно спасибо за пример
← →
Ghost. (2002-10-31 12:28) [7]Точно только через DNS и соединение...с сервером..но это почти тоже, что и отправка и времени не сэкономит
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c