Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.018 c
6-86069
urich
2002-10-29 17:28
2002.12.26
Upload по http использую WinInet


14-86096
RV
2002-12-05 11:24
2002.12.26
Меня на математику пробило... e^(i pi)-1=0.


1-85932
eLVik
2002-12-17 15:03
2002.12.26
Цвет фона ячейки в StringGrid


14-86180
Ketmar
2002-12-06 19:20
2002.12.26
а давайте меня в мастера примем?


1-85939
SkyQuake
2002-12-17 15:30
2002.12.26
Возращение текста CGI-приложением