Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: Naka в Apr 27, 2015, 13:19



Титла: Валидиране на email / допустими символи
Публикувано от: Naka в Apr 27, 2015, 13:19
Имам функция за проверка на email. работи и е направена по стандарт.
Домейн частта след @ се проверява по МХ запис и там всичко е наред.
А юзер частта се проверявя синтактично. Проблема е че email стандарта допуска ужасно много символи в юзер частта. Допускатъ се например тези символи !#$%&'*+\/=?^`{|}~
Което е не само грозно а и не вярвам някой да има такъв е-маил


Искам да я доработя и да огранича символите в юзер частта, така че да е съвместимо с повече от известните mail доставчици:

това са допустимите символи на основните
abv      [a-z] [0-9] [.]  [_]
hotmail [a-z] [0-9] [.]  [-] [_]
gmail     [a-z] [0-9] [.]
yahoo   [a-z] [0-9] [.]  [_]

Засега нещата се очертават към [a-z] [0-9] точка тире и underscore.
Искам да включа обаче и кирилца ??? какво мислите. Други стандарти и правила забелязали ли сте.

ако го напрявя така:
[a-z] [а-я] [0-9] [.] [-] [_]
дали някъде няма да изкочи проблем?

Ами малки и големи букви. Тези майли правят ли разлика между
NaKa@gmail.com и naka@gmail.com или третират NaKa и naka за един същи юзер.




Титла: Re: Валидиране на email / допустими символи
Публикувано от: d0ni в Apr 27, 2015, 15:44
Леко встрани от темата - не знам доколко е известно, но gmail стрип-ват точките. T.e. имейл до n.a.k.a@gmail.com/n.aka@gmail.com/etc ще се получи от naka@gmail.com. Може би би искал да вземеш това предвид при проверка дали такъв имейл съществува в базата.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: 4096bits в Apr 27, 2015, 16:10
Леко встрани от темата - не знам доколко е известно, но gmail стрип-ват точките. T.e. имейл до n.a.k.a@gmail.com/n.aka@gmail.com/etc ще се получи от naka@gmail.com. Може би би искал да вземеш това предвид при проверка дали такъв имейл съществува в базата.
Това не е вярно. Имам три имейла в gmail и трите са с точки.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: neter в Apr 27, 2015, 16:23
Леко встрани от темата - не знам доколко е известно, но gmail стрип-ват точките. T.e. имейл до n.a.k.a@gmail.com/n.aka@gmail.com/etc ще се получи от naka@gmail.com. Може би би искал да вземеш това предвид при проверка дали такъв имейл съществува в базата.
Това не е вярно. Имам три имейла в gmail и трите са с точки.
По-точно казано, в Gmail адресите точките са без значение. По този въпрос неотдавна разработчиците се наложи да кърпят стабилна дупка - писмата бяха видими от всякакви акаунти спрямо точките, но човек можеше да си направи отделни регистрации с тях, при което друг човек можеше да си направи регистрация с твоя адрес, но друга конфигурация на точките и можеше да ти чете пощата. Текущо съществува само една регистрация, независимо от точките, като акаунтът се асоциира с такава конфигурация на точките, с каквато е регистриран първоначално. Може да пробваш да влезеш в адресите си без точки или с друга конфигурация на точките.

Naka, по принцип като неписан стандарт е прието пощенските адреси да не са чувствителни към регистъра (главни/малки) на буквите и в повечето пощенски услуги това се спазва, като не съм попадал на публична такава, в която да не е така. Но е възможно в настройките на сървъра да се укаже да се прави разлика спрямо регистъра, дори са ми попадали такива сървъри, неприятно е, колкото споменатите от теб допълнителни позволени символи и би трябвало да вземеш такова отношение към регистъра, каквото и към въпросните специални символи.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: Naka в Apr 27, 2015, 17:01
Но е възможно в настройките на сървъра да се укаже да се прави разлика спрямо регистъра, дори са ми попадали такива сървъри, неприятно е, колкото споменатите от теб допълнителни позволени символи и би трябвало да вземеш такова отношение към регистъра, каквото и към въпросните специални символи.

Не можах да те разбера  ??? какво за 'допълнителните позволени символи'

Колкото за малки и големи букви му намерих решение: записвам го email-а в базата така както е въведен - а пък маил сървера на който ще се праща да му мисли и да си ги интерпретира малките и големите букви както си иска.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: neter в Apr 27, 2015, 17:15
Имах предвид при теб да се съобразиш толкова с възможността конкретният пощенски сървър да прави разлика между големи и малки букви, колкото и ще се съобразиш с поддръжката на символите !#$%&'*+\/=?^`{|}~
Т.е., както си решил да не допускаш вписване в базата на адреси, съдържащи тези символи, не допускай и вписване в базата на отделни записи на адресите спрямо регистъра. Т.е., гледай да нямаш отделни записи в базата за NaKa@gmail.com и naka@gmail.com, като бих ти препоръчал записът да е само с малки букви. А дали ще забраниш въвеждане на главни букви, или след въвеждане ще правиш буквите малки, преди да впишеш адреса в базата, това е по-добре да си го решиш сам, спрямо твоите ситуация, възможности и удобство.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: Demayl в Apr 27, 2015, 19:09
Засега ползвам /^[A-Z0-9\._\%\+-]+@/i и не съм имал грижи


Титла: Re: Валидиране на email / допустими символи
Публикувано от: d0ni в Apr 27, 2015, 19:30
Това не е вярно. Имам три имейла в gmail и трите са с точки.

Пробвай да си пратиш мейл до някой от акаунтите без точката и тогава ще говорим пак :-)


Титла: Re: Валидиране на email / допустими символи
Публикувано от: d0ni в Apr 27, 2015, 19:34
По темата, валидирам юзър частта с:

[a-z0-9][a-z0-9_\.-]* с case insensitive flag. Задължително ги записвай с lowercase в базата, ще ти спести мъки.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: 4096bits в Apr 27, 2015, 20:49
Това не е вярно. Имам три имейла в gmail и трите са с точки.

Пробвай да си пратиш мейл до някой от акаунтите без точката и тогава ще говорим пак :-)
Защо да го правя? Имейлите ми са от типа bai.hui@gmail.com и така ги давам на хората, а и аз съм пращал. Защо да  махам точката, като пращам или друг като праща?


Титла: Re: Валидиране на email / допустими символи
Публикувано от: neter в Apr 27, 2015, 21:14
Защо да го правя?
За да разбереш, че в Gmail адресите точките имат само визуално значение. Че няма значение дали изпращачът е изписал точката (или една торба точки, ако ще), или не - все ти ще получиш писмото. И че няма значение дали си изписал точката (или една торба точки, ако щеш) при влизане в акаунта ти - все в твоя акаунт ще влезеш. Никой не те кара да даваш адресите си без точки :)


Титла: Re: Валидиране на email / допустими символи
Публикувано от: 4096bits в Apr 27, 2015, 21:58
Аха!  :) Ми знам ли?! Не мъ грее особено. Пиша си точките и толкоз.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: Naka в Apr 28, 2015, 09:45
Засега ползвам /^[A-Z0-9\._\%\+-]+@/i и не съм имал грижи
% и + за какво са?
urlencode ? ама това кодиране е за url параметрите след домейна и ?
за юзера и домейна не знам да се ползва urlencode

Задължително ги записвай с lowercase в базата, ще ти спести мъки.

какви мъки.... при търсене?
бих ги записал в lowercase само ако съм абсолютно сигурен, че няма сървер в света който да прави ралика между големи и малки букви.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: BRADATA в Apr 28, 2015, 10:46
Засега ползвам /^[A-Z0-9._%+-]+@/i и не съм имал грижи
% и + за какво са?
urlencode ? ама това кодиране е за url параметрите след домейна и ?
за юзера и домейна не знам да се ползва urlencode

Задължително ги записвай с lowercase в базата, ще ти спести мъки.

какви мъки.... при търсене?
бих ги записал в lowercase само ако съм абсолютно сигурен, че няма сървер в света който да прави ралика между големи и малки букви.
http://stackoverflow.com/questions/9807909/are-email-addresses-case-sensitive


Титла: Re: Валидиране на email / допустими символи
Публикувано от: Naka в Apr 28, 2015, 12:28
http://www.gossamer-threads.com/lists/qmail/users/111026

сега го пробвах. вярно е. Qmail-a при доставяне преобразува имената в lowercase.
така че ако сървера е Qmail
naka@example.com и NaKa@example.com ще отидат на едно и също място на юзера 'naka'

Но ако в системата имаш юзер NAKA или NaKa той никога няма да получи мейл независимо как го пращаш.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: laskov в Apr 28, 2015, 18:44
Това валидиране защо не се прави като се пробва rcpt to ?


Титла: Re: Валидиране на email / допустими символи
Публикувано от: Naka в Apr 28, 2015, 21:31
Това валидиране защо не се прави като се пробва rcpt to ?
Поради много причини.  Аз първоначално така го мислих и след това се отказах.

1.могът да те бамнат.  Никой доставчик няма да е щаслив ако му почукваш на вратата.  Едно е да проверяваш за MX запис в днс-а съвсем друго е да правиш конекция към сървера.
2.ако това би било възможно,  тогава ще е и вузможно да извадиш списък на всички юзери към някой сървер- например Gmail.  Точно заради това така са направили че връзката не прекъсва след rcpt to и не съобщВа че няма такъв юзер, а приема цялото писмо при невалиден юзер. Е след това се връща писмо че не може да се достави ама след дъжд качулка.
3.доволно сложно е. Трябва да се прави цял пълен изпращаш смтп сървер.


Титла: Re: Валидиране на email / допустими символи
Публикувано от: laskov в Apr 28, 2015, 22:39
2.ако това би било възможно,  тогава ще е и вузможно да извадиш списък на всички юзери към някой сървер- например Gmail.  Точно заради това така са направили че връзката не прекъсва след rcpt to и не съобщава че няма такъв юзер, а приема цялото писмо при невалиден юзер. Е след това се връща писмо че не може да се достави ама след дъжд качулка.
Това не е точно така - този начин на работа се счита за остарял.
Спамерите често пращат писма до грешно генерирани адреси. Когато пощенските ми сървъри започнаха да се задъхват да пращат (и да се опитват дни наред, понеже и подателите не съществуват) съобщения за несъществуващи пощенски кутии, което в един момент започва да прилича на ДОС атака, промених начина на работа - съобщение за несъществуваща ПК се връща веднага след rcpt to, и преди да се приеме писмото. Ако искаш можеш да пробваш да получиш списък на ПК на festa.bg