Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: e-mail -> php
Forum PHP.pl > Forum > PHP
TomASS
Witam.


System składania zamówień drogą elektroniczną przez www. Jednak w niektórych firmach pracownicy mają dostęp tylko do poczty. Mam zamiar zrobić jakiś wzór e-maila aby był wysyłany na serwer i dane te wchodziłyby do bazy danych (przez PHP) czy to możliwe aby PHP czytał e-maile?


Dzięki.
Tom.
mike
Możliwe, PHP ma bibliotekę do obsługi poczty: IMAP.
Możesz praktycznie napisać własnego klienta poczty.

Zajrzyj, popatrz, postudiuj. Potem przyjdzie czas na szczegółowe pytania winksmiley.jpg
siemakuba
Jeżeli masz dostęp do serwera większy niż tylko standardowa obsługa na potrzeby www i www leży na tym samym serwerze co serwer pocztowy możesz spróbować też z innej strony.

Poszukaj o konfiguracji poczty przez plik procmail.rc. W tym pliku, możesz sobie utworzyć regułę, która spowoduje, że mail (jego treść) z określonym nagłówkiem (lub o określonym temacie, określonym nadawcy czy cokolwiek) zostanie przekazany do skryptu php.

Pseudokod (w procmail.rc):
Kod
if(header == 'x-shop-mail')
    php /home/www/shop/save-mail-2-db.php?mail=$1


P.S. Takie kombinacje uda ci się wykonać chyba tylko wtedy, kiedy firma ma własny serwer. Dodatkowo, niesie to za sobą sporo ograniczeń na pewno, które pewnie nie pojawią się przy korzystaniu z IMAP, o którym wspomniał @mike_mech. Podaję, jako jeden ze sposobów, być może akurat będzie odpowiedni.

pozdr.
TomASS
Dzięki koledzy, noto teraz czas na pytania:

wydziergałem coś takiego:
  1. <?
  2. $mbox = imap_open("{xxxxxx.pl:110/pop3}INBOX", "zzzz@xxxxxxpl", "haselko");
  3.  
  4. if (imap_num_msg($mbox) == 0)
  5. {
  6. echo 'Brak wiadomosci';
  7. }
  8. else{
  9. $emails = imap_search($mbox, "UNSEEN SUBJECT palety");
  10.  
  11. if(is_array($emails)){
  12. foreach ($emails as $message) {
  13. $naglowek = imap_headerinfo($mbox,$message,80,80);
  14. $from = $naglowek->from[0]->mailbox . '@' . $naglowek->from[0]->host;
  15. $date = gmdate('Y-m-d H:i:s', $naglowek->udate);
  16. $body = nl2br(imap_fetchbody($mbox, $message, "1"));
  17. }
  18. }
  19. }
  20. ?>

Wszystko pinknie czyta, ale teraz jak mam ustawić wiadomość na "przeczytaną"?
Daję np.:
  1. <?php
  2. if(is_array($emails)){
  3. foreach ($emails as $message) {
  4. $naglowek = imap_headerinfo($mbox,$message,80,80);
  5. $from = $naglowek->from[0]->mailbox . '@' . $naglowek->from[0]->host;
  6. $date = gmdate('Y-m-d H:i:s', $naglowek->udate);
  7. $body = nl2br(imap_fetchbody($mbox, $message, "1"));
  8. $status = imap_setflag_full($mbox, "2,5", "Seen");
  9. }
  10. }
  11. ?>

i niestety nie działa :/

Dzięki za rozwianie wątpliwości smile.gif
virusek856
Być może serwer nie obsługuje flag,
Rozwiązaniem, może być pobranie maila i zapisanie go lokalnie a następnie usunięcie z serwera pocztowego imap_delete + imap_expunge.
Jeżeli są to zamówienia z sklepu www, to wydaje mi się, że informacje o zamówieniu zostaną w jakiś sposób sparsowane i tak trafią do bazy, więc mail jest już bezużyteczny.
TomASS
Serwer obsługuje flagi.
Cytat
  1. <?php
  2. imap_delete + imap_expunge.
  3. ?>

Używam
  1. <?php
  2. imap_delete($mbox, $message);
  3. imap_close($mbox,CL_EXPUNGE);
  4. ?>


Cytat
Jeżeli są to zamówienia z sklepu www,

Nie są smile.gif

Cytat
to wydaje mi się, że informacje o zamówieniu zostaną w jakiś sposób sparsowane

No właśnie ja je parsuję
Cytat
więc mail jest już bezużyteczny

Muszę mieć historię e-maili a najlepiej chyba po prostu zostawić je na skrzynce.


Dzięki
T.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.