Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 7.279 pregleda

Najnovija ↓

Parsiranje email adrese iz From polja 07.10.2005. u 12:34 · pre 256 meseci #1
Da nema neko gotovu funkciju koja izvadi email adresu iz From polja zaglavlja email poruke?
Re: Parsiranje email adrese iz From polja 07.10.2005. u 13:26 · pre 256 meseci #2
Mogu ti ja napisati samo mi reci kakav ulazni parametar zelis da das (string sa linijim u kojem je 'From: ....', naziv fajla poruke, TStringList u kojem je sadrzaj fajla poruke, nesto drugo...) i sta zelis na izlazu.

Bilo bi dobro da mi napises kako izgleda linija u kojoj je 'From: ...' podatak.
Potpis
Play Store
Re: Parsiranje email adrese iz From polja 07.10.2005. u 15:41 · pre 256 meseci #3
Srki, mogu i ja da napisem, nego gledam da nije neko vec to radio da ne krecim dzabe. From polje moze da sadrzi tekst prilicno raznolikog sastava, ukljucujuci i vise email adresa.

Recimo ovo je sve validan sadrzaj:

Pera Peric <[email protected]>

Pera Peric<[email protected]>

"Pera Peric" <[email protected]>

[email protected]

<[email protected]>


i sve kombinacije gornjih slucajeva ako je mail namenjen za vise primalaca, s timda su email adrese razdvojene zarezom....

Inace, format mail poruke ukjucujuci i adresa je definisan u RFC0822

Re: Parsiranje email adrese iz From polja 07.10.2005. u 16:03 · pre 256 meseci #4
Ja sam radio nešto slično. Evo kako ja radim:

Code:

function CutStr(Tekst, StartString, EndString: string):string;
var
  StartPos, EndPos: integer;
begin
    StartPos:=stratpos(StartString, Tekst)+length(StartString);
    EndPos:=stratpos(EndString, Tekst);
    Result:=copy(Tekst, StartPos, EndPos-StartPos);
end;

function stratpos(FindWhat, FindWhere: string): integer;
var Rezultat: integer;
  i: integer;
begin
  Rezultat := -1;
  for i:=1 to length(FindWhere)-length(FindWhat) do
    if copy(FindWhere, i, length(FindWhat)) = FindWhat then
      Rezultat := i;
  Result:=Rezultat;
end;


Koristi se:

Code:

EMail:=cutStr("Pera Peric <[email protected]>", '<', '>');
Potpis
routing protocols enable routers to route routed protocols!
Re: Parsiranje email adrese iz From polja 07.10.2005. u 16:55 · pre 256 meseci #5
Ako mozes i sam... onda pici :)

Ja bih to licno ovako uradio:
Prvo bih razdvojio potencijalne adrese gde bi ',' ili ';' bio separator. Zatim bih pronasao gde se nalazi @ i onda bih isao levo i desno od @ sve dok se tu nalaze validni karakteri za email adresu (kazes da u RFC0822 o tome govore). Tako dobijas email adresu. Zatim proveris da li je mail ogranicen znakovima < i > i ako jeste slobodno ih izbacis iz dalje provere. Sad uzmes ostatak stringa, ako ima ispred ili iza praznih mesta skines ih, proveris da li su prvi i zadnji karakter navodnici i skines ih ako jesu i tako dobijes i naziv asociran za tu email adresu. Eto ti pa kuckaj funkciju :)
Potpis
Play Store
Re: Parsiranje email adrese iz From polja 10.10.2005. u 10:36 · pre 256 meseci #6
Sojicu, dobar pokusaj ali nece da odradi na svim primerima. Stavise, zaboravio sam da kazem da se u From polju na bilo kom mestu moze naci TAB ili CR ili LF ili CRLF ili LFCR...

Srki, to kako si opisao jeste prvo sto pada na pamet, medjutim, sporo je. Ja imam neku ideju da prvo izdelim string napodstringove koristeci delimitere kao sto su space, zarez, tacka zarez, zagrade i slicno pa onda da izdvojim sve stringove koji sadrze @. Cini mi se brze.
Re: Parsiranje email adrese iz From polja 10.10.2005. u 17:34 · pre 256 meseci
izmenjeno 1 put, poslednji put broker 10.10.2005. u 17:35
  1. broker10.10.2005. u 17:35zapis iz teksta poruke
#8
Evo kako sam to odradio:

Code:


function CheckEmailValidity (email : string) : boolean;
begin
  Result := not ((Length (email) < 5) or (Pos ('@', email) = 0));
end;

function ParseEmail (text: string): TStrings;
const
  InvalidChars = ' ' + #13 + #10 + #9 + ',:<>' + '"' + '''';
var
  i : Integer;
  tmpStr : string;
begin
  Result := TStringList.Create;
  i := 0;
  repeat
    Inc (i);
    if IsDelimiter (InvalidChars, Text, i) then begin
      tmpStr := copy (Text, 1, i - 1);
      Delete (Text, 1, i);
      if CheckEmailValidity (tmpStr) then Result.Add (tmpStr);
      i := 0;
    end;
  until i >= Length (Text);
  if CheckEmailValidity (Text) then Result.Add (Text);
end;



Funkcijom ParseEmail se iz ulaznog stringa izdvaja ciste email adrese. Ulaz je string koji moze da sadrzi i vise email adresa po sintaksi zaglavlja email poruka. U slucaju potrebe, konstantu InvalidChars treba prosiriti i sa drugim znacima koji se ne smeju naci u email adresi te se izdvajanje moze vrsiti iz bilo kog teksta.

Izlaz je TStringList koji sadrzi izdvojene email adrese.

Provera email adrese se vrsi funkcijom CheckEmailValidity koja je veoma jednostavna jer nisam imao potrebe za boljom, a ako je potrebna ozbiljnija provera, onda izmeniti ovu funkciju. Ako neko napravi bolju neka posalje kod.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme