Wyciąganie adresów e-mail za pomocą imap problem z tablicą |
Wyciąganie adresów e-mail za pomocą imap problem z tablicą |
11.12.2017, 10:39:58
Post
#1
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) |
Witam. Chciałem wyciągnąć i zapisać do bazy adresy e-mail znajdujące się w body przychodzących wiadomości.
W ten sposób
Łączy się ze skrzynką, zlicza maile ale nie wiem jak rozwiązać problem tablic w pętli. W body każdej wiadomości może być kilka adresów e-mail. print_r($value); daje: <pre>Array ( ) </pre><pre>Array ( ) </pre><pre>Array ....... Z góry dziękuję za pomoc |
|
|
11.12.2017, 11:37:04
Post
#2
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
|
|
|
11.12.2017, 23:03:12
Post
#3
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) |
Dziękuję za pomoc. Już widzę, że preg_match_all źle działa nawet po wdrożeniu Twoich poprawek bo zwraca z var_dump($wynik); i adresy email i takie
string(3) "bok" [6]=> string(3) "bok" [7]=> string(32) "4bc4570b8428b3157e8fbad138aa2809" [8]=> string(3) "bok" } [2]=> array(9) { [0]=> string(5) "sopro" [1]=> string(5) "sopro" [2]=> string(8) "sopro.pl" [3]=> string(8) "sopro.pl" [4]=> string(8) "sopro.pl" poszukam czegoś nowego i albo wrócę z rozwiązaniem dla innych albo z kolejnym pytaniem |
|
|
12.12.2017, 06:39:18
Post
#4
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Chyba się jakoś pogubiłeś jednak. Zobacz jak to działa ładnie:
https://3v4l.org/RsgZA Sam pattern regexa dodatkowo uprościłem, bo w sumie na internecie jest sporo przykładów na taki pattern, a ostatecznie warto by wiedzieć, jak to reguluje standard. Ja bym to brał takim regexem jak ten tutaj, a potem filter_var dla mejla w php.
Ten post edytował trzczy 12.12.2017, 06:40:51 |
|
|
13.12.2017, 18:34:53
Post
#5
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) |
Dzięki za pomoc trzczy ale z naturalnego maila wychodzi nienajlepiej.
Taki kod z Twoim $pattern:
daje taki wynik: print_r($matchArrayArray ( [0] => luga.klienta.skarzysko@castorama.pl">obsluga.klienta.skarzysko@castorama.pl= [1] => <p>obsluga.klienta.skarzysko@castorama.pl<br> [2] => ##rfc822;obsluga.klienta.skarzysko@bricodepot.pl</p> [3] => <obsluga.klienta.skarzysko@bricodepot.pl> [4] => <obsluga.klienta.skarzysko@bricodepot.pl> [5] => <bok@anonser.eu> [6] => <bok@anonser.eu> [7] => <3894b5989a98437667a58858f613a4fd@localhost.locald [8] => bok@anonser.eu ) echo Svalue = luga.klienta.skarzysko@castorama.pl">obsluga.klienta.skarzysko@castorama.pl= print_r($valueecho Svalue = <p>obsluga.klienta.skarzysko@castorama.pl<br> print_r($valueecho Svalue = ##rfc822;obsluga.klienta.skarzysko@bricodepot.pl</p> print_r($valueecho Svalue = <obsluga.klienta.skarzysko@bricodepot.pl> print_r($valueecho Svalue = <obsluga.klienta.skarzysko@bricodepot.pl> print_r($valueecho Svalue = <bok@anonser.eu> print_r($valueecho Svalue = <bok@anonser.eu> print_r($valueecho Svalue = <3894b5989a98437667a58858f613a4fd@localhost.locald print_r($valueecho Svalue = bok@anonser.eu Może coś jeszcze pomożecie Panowie (i Panie) |
|
|
13.12.2017, 19:25:05
Post
#6
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Prawda. Mój regex zakładał, że na końcu i początku adresu jest spacja. To było chore założenie. Co do dalszej pomocy to mogę poszukać na internecie, jaki jest najlepszy regex na mejla, za 50zł.
Ten post edytował trzczy 13.12.2017, 19:29:14 |
|
|
13.12.2017, 20:08:14
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
|
|
|
13.12.2017, 21:08:29
Post
#8
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) |
regex to jedno. Coś można w sieci szukać, coś można potem kombinować z wynikami przez strpos czy coś.
Mnie bardziej martwi to, że te moje foreach dają ostatecznie array zamiast kolejno pojedynczy $email w pętli z którym można by zrobić $qry = mysql_query("UPDATE tabela SET zly_email = 1 WHERE email LIKE $email") I w tym jakbyście kochani pomogli bo ugrzązłem. |
|
|
14.12.2017, 05:18:53
Post
#9
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Mnie bardziej martwi to, że te moje foreach dają ostatecznie array zamiast kolejno pojedynczy $email w pętli Czekaj... jak masz tablicę stringów, to wewnątrz pętli foreach jest dostęp do każdego stringa jako stringa. Może powinieneś robić zapytanie w środku pętli, a nie czekając na jej koniec. |
|
|
14.12.2017, 12:40:39
Post
#10
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) |
Czekaj... jak masz tablicę stringów, to wewnątrz pętli foreach jest dostęp do każdego stringa jako stringa. Może powinieneś robić zapytanie w środku pętli, a nie czekając na jej koniec. No jasne, wyniki print_r mnie zmyliły. Poniżej zamieszczam działający skrypt, który wyciąga adresy e-mail z Undelivery i oznacza te adresy w bazie danych jako złe. Adresy e-mail, które zostały po naszej wysyłce odrzucone - Undelivery są ukryte w body wiadomości. Jest tam na raz kilka postaci adresów, w tym nasz. Przykład: [0] => bok@anonse.eu [1] => jan.piotrow.zurm@wp.pl [2] => rfc822;jan.piotrow.zurm@wp.pl [3] => "jan.piotrow.zurm@wp.pl": Z przejrzenia iluś tam setek wyników wychodzi, że adres o który nam chodzi można identyfikować po "rfc822;" i tak też filtruje ten skrypt. Być może na innym serwerze jest inaczej, stąd zostawione print_r i echo do testów. Powyższy "czysty" przykład jest z parsowania body z parametrem "2", dla "1.2" było dużo gorzej. Wskazany jest podfolder Drafts, bo tam zostały zrzucone do testów wiadomości Undelivery. Dzięki za pomoc wszystkim z tego tematu
Ten post edytował maraska 14.12.2017, 13:05:32 |
|
|
Wersja Lo-Fi | Aktualny czas: 28.03.2024 - 13:17 |