Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Как проверить корректность 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
3-85786
бобёр
2002-12-05 16:44
2002.12.26
IB


1-85980
Sergik
2002-12-16 00:35
2002.12.26
Windows XP


1-85948
race1
2002-12-15 14:05
2002.12.26
image


14-86150
_Nicola_
2002-11-28 17:09
2002.12.26
Дельфи и USB джойстик


1-85888
vitnt
2002-12-16 06:40
2002.12.26
Файл занят?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский