Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [w. reg.] Pobieranie content-type z maila
Seth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Pisze wyrazenie regularne do pobrania Content-Typea z czystego maila i natrafilem na maly problem.

Mozliwe ustawienia Content-Type to:
Kod
Content-Type: multipart/alternative; boundary="jh2x4CpaBw6eoB8"

Kod
Content-Type: multipart/alternative; boundary=jh2x4CpaBw6eoB8

Kod
Content-Type: multipart/alternative;
     boundary="jh2x4CpaBw6eoB8"

Kod
Content-Type: multipart/alternative;
     boundary=jh2x4CpaBw6eoB8

Kod
Content-Type: multipart/alternative;
boundary="jh2x4CpaBw6eoB8"

Kod
Content-Type: text/plain; charset="utf-8"

Kod
Content-Type: text/plain;
     charset="utf-8"

itd...

Narazie mam takei wyrazenie:
Kod
/^content-type: (.*);$/im

ktore pobiera mi ta pierwsza opcje (multipart/alternatice itp.)


Nie wiem jednak jak sie zabrac do drugiej czesci: boundary i charset.

Moze ma ktos na to pomysl ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
bendi
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <? 
  2. $sString = 'Content-Type: multipart/related;
  3.     type=\"multipart/alternative\";
  4.     boundary=\"__mime_boundary_related__NEXT_PART_\"
  5. From:Marek B <bla@bla.pl>';
  6. preg_match_all( '/content-type:(.*?)\"[^;]n/si', $sString, $aMatches );
  7. ?>

No i w tablicy aMatches mamy:
Kod
Array
(
   [0] => Array
       (
           [0] => Content-Type: multipart/related;
    type="multipart/alternative";
    boundary="__mime_boundary_related__NEXT_PART_"

       )

   [1] => Array
       (
           [0] =>  multipart/related;
    type="multipart/alternative";
    boundary="__mime_boundary_related__NEXT_PART_
       )

)

No i mysle ze dobranie sie do szczegolow nie bedzie stanowilo problemu.

BTW: to musza byc regularki questionmark.gif Domyslam sie ze to ma byc uniwersalne rozwiazanie, no ale duzo szybciej i latwiej jest skorzystac z rozszerzenia imap" title="Zobacz w manualu PHP" target="_manual, a dokladniej z funkcji imap_fetchstructure" title="Zobacz w manualu PHP" target="_manual

Ten post edytował bendi 30.03.2005, 12:25:01


--------------------
Go to the top of the page
+Quote Post
Seth
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Wielkie dzieki smile.gif

Niestety IMAP nie wchodzi tutaj w gre. Mail jest przesylany wprost do skryptu php przez php://stdin dlatego regularne wydaja mi sie tutaj najodpowiedniejsze.
Go to the top of the page
+Quote Post
bendi
post
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nie wiem co knujesz, ale jezeli budujesz "dekoder" mejla to moze ci sie to przydac .

P.S. Sorka ze tak pozno, ale dopiero wczoraj na to trafilem winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Seth
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Klasa jest swietna, wlasnie o to mi chodzilo.
Dzieki ! smile.gif

Mam jednak jeszcze jedno pytanie z zakresu pregow (nie moge na tym etapie uzyc tej klasy):

Chcial bym pobrac naglowki: from, to, cc, bcc, subject z listy naglowkow maila za pomoca jednego wyrazenia regualrnego.
Jednak nie wiem jak je polaczyc :?

Czyli jak polaczyc w jedno wyrazenie takie oto wyrazenia:
Cytat
$regHeaders = array(
  'from'    => '/^from: (.*)$/si',
  'to'      => '/^to: (.*)$/si',
  'cc'      => '/^cc: (.*)$/si',
  'bcc'    => '/^bcc: (.*)$/si',
  'subject' => '/^subject: (.*)$/si'
);

?


P.S.
Nie chodzi o dekoder. Podpowiedz w mojej sygnaturce winksmiley.jpg
Go to the top of the page
+Quote Post
bendi
post
Post #6





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Niestety nie przychodzi mi nic lepszego do glowy a na dodatek musze Cie nieco zmartwic, pomysla nie mam a na dodatek mam wrazenie ze te regulki, ktore wpisales w swoim poscie nei zadzialaja (przynajmniej nie zadzialaly na moim testowym zestawie naglowkow :/)

Sprawa jest niezwykle trudna - pokaze Ci co probowalem kombinowac, to moze akurat bedziesz mogl to jakos wykorzystac.

Najpierw myslalem zeby porozbijac same naglowki preg_splitem i lapac tez to pattern ktory powodowal rozbicie
  1. <?php
  2. preg_split( '%[s]+(from|to|bcc|cc|subject):%si', $sString, -1, PREG_SPLIT_DELIM_CAPTURE )
  3. ?>

Niestety okazalo sie ze to nie chce dzialac tak jak myslalem, bo okazalo sie ze takie naglowki jak "reply-to", albo kazdy inny z "to" w nazwie zaburzal wyszukiwanie naglowka "to"..

...no to pozniej wymyslilem ze bede pobieral wybrane naglowki w ten sposob:
  1. <?php
  2. preg_match_all( '/[s]+(from|to|bcc|cc|subject):(.*?)([w]+:)/si', $sString, $aMatches, PREG_SET_ORDER );
  3. ?>

Idea ktora lezala u podstaw napisania tej regulki zakladala ze naglowek moze sie przelamac do nowej linii, ale nie bedzie przeciez lecial dalej niz nastepny naglowek, no i wszytko cacy....
minusy:
- zatrzymuje sie na pierwszym napotkanym ciagu litery_: czyli np. "RE:" ktory przeciez jest bardzo czesto stosowany w tytulach
- po drugie lapiac nazwe kolejnego naglowka, silnik wyrazen oznacza te czesc tekstu jako przetworzona i juz do niej nie wraca, z powodu czego co drugi naglowek jest poprawnie odczytywany.

Niestety testowego zestawu naglowkow Ci tutaj nie moge wkleic, no ale jak sobie podejrzysz zrodlo wiadomosci spod outlooka expresa (nie tego ktory jest czescia ofisa, bo tam nie ma tej funkcji :/) to z mejla wyciagniesz co trzeba.

Jak widac moje proby skonczyly sie porazka, ale zycze powodzenia exclamation.gif


--------------------
Go to the top of the page
+Quote Post
FiDO
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


a takie cos nie wystarczy? smile.gif
  1. <?php
  2.  
  3. preg_match_all('#^(From|To|CC|BCC|Subject):(.+)n(?!t)#Umsi', file_get_contents('mail.msg'), $m);
  4.  
  5. echo &#092;"<pre>\";
  6. print_r($m);
  7. echo &#092;"</pre>\";
  8.  
  9. ?>


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
bendi
post
Post #8





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(FiDO @ 2005-04-12 15:35:37)
a takie cos nie wystarczy? smile.gif

sam mi powiedz

[edit] Fakt slicznie dziala winksmiley.jpg. Sorka nie sparwdzilem


--------------------
Go to the top of the page
+Quote Post
FiDO
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


No wg mnie dziala na tych danych.. wylapuje spokojnie wieloliniowego Subject'a.

Edit: tongue.gif

BTW.. mozna jeszcze to troche uscislic, bo ja przyjalem ze wszystkie wieloliniowe naglowki kolejne linie zaczynaja od tab'a, jak do tej pory nie spotkalem sie z innym przypadkiem, ale nie wiem jak to jest zdefiniowane w RFC. Mozna wiec tez robiac fuzje Twojego pomyslu z moim:
Kod
#^(From|To|CC|BCC|Subject):(.+)\n(?=\\w+:)#Umsi


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:23