Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
14-86090
ev
2002-12-04 18:54
2002.12.26
16-битная Delphi


3-85785
XM-AD
2002-12-05 15:57
2002.12.26
И снова Firebird, dialect 3 - не хочет создавать функцию


6-86049
Alexec
2002-10-28 12:48
2002.12.26
Провайдер


3-85846
ДМ
2002-12-06 07:09
2002.12.26
BLOB- поля в базах Microsoft


14-86149
jen_bond
2002-12-04 10:18
2002.12.26
FastReport




   Наверх