Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapis maili do bazy danych
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam

Mam taki sobie oto skrypcik :
Kod
<?php

        $mailbox = "{imap.gmail.com:993/imap/ssl}INBOX";
        $user = "username";
        $pass = "password";

        $mbox = imap_open ($mailbox, $user, $pass)
        or die("can't connect: " . imap_last_error());


        echo "<h1>Mailboxes</h1>\n";
        $folders = imap_listmailbox($mbox, "{imap.gmail.com:993}", "*");

        if ($folders == false) {
            echo "Call failed<br />\n";
        } else {
            foreach ($folders as $val) {
                echo $val . "<br />\n";
            }
        }

        echo "<h1>Headers in INBOX</h1>\n";
        $headers = imap_headers($mbox);

        if ($headers == false) {
        echo "Call failed<br />\n";
        } else {
            foreach ($headers as $val) {
                echo $val . "<br />\n";
            }
        }

        $num = array(1,2,3);
        $numC = count($num);

        echo '<h1>Body of specified message</h1>';
        for ($i = 0; $i < $numC; ++$i)
        {
        $body = imap_body($mbox, $num[$i]);

        if ($body == false) {
            echo 'Call failed (' . $num[$i] . ')<br />';
        }
        else
            echo $body;
        }

        imap_close($mbox)


        ?>


Pominmy wyswietlanie tego co zostalo pobrane.
Nie mam pojecia jak teraz moge zapisac maile wraz z naglowkami do bazy danych po to abym mogl je pozniej z bazy wyciagnac i przeprowadzic na ich zawartosci analize....jaka analize to juz raczej nie ma znacznia , wazne jest to abym wiedzial gdzie konczy sie jeden mail a zaczyna drugi.....chociazby aby zostaly one zapisane do bazy tak aby kazdy mail byl w osobnej komorce.

I jeszcze jedno pytanko.
Czy za pomoca tych funkcji do pobierania maili z powyzszego skryptu pobierane sa rowniez tagi html i wszystkie szczegolowe informacje ktore sa przesylane przez protokoly ?

Ten post edytował Wolfie 28.01.2009, 15:32:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Aby mieć każdy mail w osobnym rekordzie (nie komórce) musisz użyć funkcji imap_sort(), która pobiera wszystkie wiadomości ze skrzynki. Otrzymasz tablicę z ID'ami poszczególnych wiadomości.

Teraz wykonujesz na tej tablicy foreach lub dowolną pętlę (wskazana, którą wymieniłem) i pobierasz nagłówki oraz body wiadomości, każdy z maili zapisujesz INSERT INTO do bazy jako osobny rekord. Kluczem rekordu powinien być też klucz ID wiadomości ze skrzynki - zapobiegnie to ewentualnemu dublowi. Do wyciągnięcia body używasz imap_fetchbody(), a do headerów imap_header().

Najlepiej po sprawdzeniu, czy zapis do bazy powiódł się, wywalić wiadomość ze skrzynki, żebyś nie musiał potem sprawdzać, czy istnieje i pobierać ją (wydłużać tego arraja). W tym celu oznaczasz wiadomość do usunięcia w foreach funkcją imap_delete() podając aktualny ID. Po zakończeniu pętli musisz wykonać funkcje, aby te wiadomości zniknęły: imap_expunge().

Kończysz imap_close() i gotowe. Ja do tego mam klasę, którą sobie napisałem, możesz wyciągnąć z niej jakieś kawałki:

  1. <?php
  2.  
  3. class Vframe_Mail_Inbox_Engine_Imap extends Vframe_Mail_Inbox_Engine
  4. {
  5.  protected
  6.    $_rConnection = null;
  7.  
  8.  public function connect($sServer, $sUser, $sPass, $iPort = 110, $sProtcol = 'pop3')
  9.  {
  10.    if(!($this->_rConnection = imap_open('{'.$sServer.':'.$iPort.'/'.$sProtcol.'/notls}INBOX', $sUser, $sPass)))
  11.      throw new Exception('Connection failed: '.imap_last_error());
  12.  }
  13.  
  14.  public function disconnect()
  15.  {
  16.    imap_expunge($this->_rConnection);
  17.    imap_close($this->_rConnection);
  18.  }
  19.  
  20.  public function inbox()
  21.  {
  22.    return imap_sort($this->_rConnection, SORTARRIVAL, false);
  23.  }
  24.  
  25.  public function delete($iId)
  26.  {
  27.    return imap_delete($this->_rConnection, $iId);
  28.  }
  29.  
  30.  public function body($iId)
  31.  {
  32.    return imap_fetchbody($this->_rConnection, $iId, 1);
  33.  }
  34.  
  35.  public function header($iId, $sParam = '')
  36.  {
  37.    $oHeader = imap_header($this->_rConnection, $iId);
  38.    
  39.    if($sParam)
  40.      return $oHeader->$sParam;
  41.    
  42.    return $oHeader;
  43.  }
  44.  
  45.  public function to($iId)
  46.  {
  47.    return $this->header($iId, 'toaddress');
  48.  }
  49.  
  50.  public function from($iId)
  51.  {
  52.    return $this->header($iId, 'senderaddress');
  53.  }
  54.  
  55.  public function subject($iId)
  56.  {
  57.    return $this->header($iId, 'subject');
  58.  }
  59. }
  60.  
  61. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 9.06.2026 - 13:11