Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przeszukiwanie skrzynki pocztowej
DNMX
post
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 18.09.2021

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


Hej
Napisałem prosty skrypcik w PHP który korzysta z biblikiteki php-imap i ma za zadanie znaleść w mojej skrzynce wszystkie maile powiedzmy od Allegro. Użyłem takiego kodu:
  1. <?php
  2. $mbox = imap_open("{imap.poczta.onet.pl:993/imap/ssl}", "mojlogin@onet.pl", "haslo");
  3. c1 = imap_search($mbox, 'SINCE "8 August 2022"', SE_UID);
  4. var_dump($c1);
  5. ?>

Tu jest ok, zwraca mi ładnie tablicę z id wiadomości otrzymanych po 8 sierpnia. Jednak gdy zrobię tak:
  1. <?php
  2. $mbox = imap_open("{imap.poczta.onet.pl:993/imap/ssl}", "mojlogin@onet.pl", "haslo");
  3. $c2 = imap_search($mbox, 'BODY "allegro"', SE_UID, "UTF-8");
  4. var_dump($c2);
  5. ?>

dostaję:
Cytat
bool(false)

Dlaczego? Co robię nie tak?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DNMX
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 18.09.2021

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


Natknąłem się na tę bibliotekę jak sam googlowałem. Przykładowy kod z jej wykorzystaniem:
  1. <?php
  2. include("vendor/autoload.php");
  3. use Ddeboer\Imap\Server;
  4. use Ddeboer\Imap\SearchExpression;
  5. use Ddeboer\Imap\Search\Email\From;
  6. use Ddeboer\Imap\Search\Text\Body;
  7. use Ddeboer\Imap\Search\Text\Keyword;
  8. use Ddeboer\Imap\Search\Text\Subject;
  9. use Ddeboer\Imap\Search\Text\Text;
  10.  
  11. $server = new Server('imap.poczta.onet.pl');
  12. $connection = $server->authenticate('login@onet.pl', 'haslo');
  13. $mailboxes = $connection->getMailboxes();
  14.  
  15. foreach ($mailboxes as $mailbox) {
  16. // Skip container-only mailboxes
  17. if ($mailbox->getAttributes() & \LATT_NOSELECT) {
  18. continue;
  19. }
  20.  
  21. if($mailbox->getName() == "Społeczności") {
  22. echo $mailbox->count();
  23. $search = new SearchExpression();
  24. $search->addCondition(new Body('contents'));
  25. $messages = $mailbox->getMessages($search);
  26. printf($messages->count()."\n");
  27. if($messages) {
  28. <------>foreach ($messages as $message) {
  29. <------> $message->getBodyText();
  30. <------>}
  31. }
  32. }
  33. }
  34. ?>

daje:
Kod
Fatal error</b>:  Uncaught Ddeboer\Imap\Exception\InvalidSearchCriteriaException: Invalid search criteria [BODY "contents"]
imap_alerts (0):
imap_errors (1):
- [SERVERBUG] BUG: Unknown internal error (0.003 + 0.000 + 0.002 secs). in /var/www/html/vendor/ddeboer/imap/src/Mailbox.php:139
Stack trace:
#0 /var/www/html/ndex.php(26): Ddeboer\Imap\Mailbox->getMessages()
#1 {main}
  thrown in <b>/var/www/html/src/Mailbox.php</b> on line <b>139</b><br />

i tak się zastanawiam, czy ten błąd " Invalid search criteria" wywala serwer Onetu czy gdzieś coś pod spodem na moim serwerze

Googluję dalej i natknąłem się na tę stronę mówiącą, że PHP korzysta z funkcji wyszukiwania z IMAP2. Tymczasem jak odezwiemy się telnetem do serwera pocztowego Onetu mówi on nam, ze komunikuje się z nami za pomocą IMAP w wersji czwartej:
Kod
telnet imap.poczta.onet.pl 143
Trying 213.180.147.154...
Connected to imap.poczta.onet.pl.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN AUTH=XOAUTH2] Onet server ready.
* BYE Disconnected for inactivity.
Connection closed by foreign host


Ten post edytował DNMX 12.03.2023, 19:01:22
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.10.2025 - 19:20