Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odbieranie poczty
Forum PHP.pl > Forum > Gotowe rozwiązania
Marcin
Ma ktoś może jakiś prosty skrypt do odbierania poczty z poziomu przeglądarki WWW??
marian8
skromny przyklad na IMAPie
index.php
[php:1:783c26cc37]<?php
$server = "domena.pl";
$uzytkownik = "uzytkownik";
$haslo = "haslo";

$mbox = imap_open("{".$server.":143}INBOX", $uzytkownik, $haslo);
if (imap_num_msg($mbox) == 0) {
echo "Brak wiadomosci<br>";
} else {
echo '<table border=1><tr><th>Lp</th><th>Data nadania</th><th>Nadawca</th><th>Temat</th><th>Usuwanie</th></tr>';
$wiad_nr = (isset($_GET['wiadomosc'])) ? $_GET['wiadomosc'] : null;
for ($i=1; $i<=imap_num_msg($mbox); $i++) {
$txt = ($wiad_nr == $i) ? ' bgcolor=#99DD99' : '';
$naglowek = imap_headerinfo($mbox,$i,80,80);
echo '<tr'.$txt.'><td>'.$i.'</td><td>'.gmdate('d-m-Y H:i:s',$naglowek->udate).'<td><a href=mailto:'.$naglowek->from[0]->mailbox.'@'.$naglowek->from[0]->host.'>'.$naglowek->from[0]->mailbox.'@'.$naglowek->from[0]->host.'</a></td><td><a href=index.php?wiadomosc='.$i.'>'.$naglowek->fetchsubject.'</a></td><td><a href=usun.php?wiadomosc='.$i.'>usuń</a></td></tr>';
}
echo '</table>';
}

if (isset($_GET['wiadomosc'])) {
$wiadomosc = imap_headerinfo($mbox, $_GET['wiadomosc']);
echo 'Od: <a href=mail:'.$wiadomosc->from[0]->mailbox.'@'.$wiadomosc->from[0]->host.'>'.$wiadomosc->from[0]->mailbox.'@'.$wiadomosc->from[0]->host.'</a>';
echo '<br>Tresc:<br>';
echo imap_fetchbody($mbox,$_GET['wiadomosc'],'1');
}


imap_close($mbox);
?>[/php:1:783c26cc37]

usun.php
[php:1:783c26cc37]<?php
$server = "domena.pl";
$uzytkownik = "uzytkownik";
$haslo = "haslo";

$mbox = imap_open("{".$server.":143}INBOX", $uzytkownik, $haslo);
if (imap_num_msg($mbox) == 0 || !isset($_GET['wiadomosc'])) {
echo "Brak wiadomosci<br>";
} else {
imap_delete($mbox,$_GET['wiadomosc']);
}

imap_close($mbox,CL_EXPUNGE);
header('Location: index.php');
?>[/php:1:783c26cc37]
kubatron
A takie pytanie poza temat, czy jest jakiś skrypt do tworzenia poczty na www czy to musi administrator mi ustawić :wink:
Marcin
Wielkie dzięki!!!!!!

Działa smile.gif
WhiteFang
Kod
Warning: imap_open(): Couldn't open stream {o2.pl:143}INBOX in /home/www/cyrkiel/email/index.php on line 6



Warning: imap_num_msg(): supplied argument is not a valid imap resource in /home/www/cyrkiel/email/index.php on line 7

Brak wiadomosci



Warning: imap_close(): supplied argument is not a valid imap resource in /home/www/cyrkiel/email/index.php on line 34



Co jest nie tak? Podaje zly serwer poczty czy co? Bo juz probowalem chyba wszystkiego i nic:((
?>[/php]
djpeterek
port trzeba zmienic na inny smile.gif ale na jaki questionmark.gif
marian8
mozna tez pokombinowac z POPem
polecam [manual:917832bc78]imap_open[/manual:917832bc78]
djpeterek
moze to chodzi ze port zamiast 143 ma byc 25 smile.gif
marian8
u mnie na localu tez nie chce sie polaczyc ale na serwerze dziala bezblednie
Do poprawnego dzialania funkcji imap_ potrzebna jest biblioteka c-client
http://pl.php.net/manual/en/ref.imap.php

djpeterek port 25 to SMTP ktory sluzy do wysylania a nie odbierania
poczty
Mozna to zrobic na POP3 (110). Ja zamienilem tylko linijke 6:

[php:1:7a89c75b35]<?php
$mbox = imap_open("{".$server.":110/pop3}INBOX", $uzytkownik, $haslo);
?>[/php:1:7a89c75b35]
i dziala
WhiteFang
marian8 - no i dziala:))) Olbrzymie dzieki!!!!

Tylko jeszcze jedna sprawa... bo wiadomosci w tym sa posortowane od NAJSTARSZEJ... da rade jakos zrobic zeby byly sortowane od najnowszej?? By mi na tym bardzo zalezalo...

Z goryTNX!!
marian8
Wydaje mi sie ze wystarczy zmienic linie 12 na nastepujaca:
[php:1:c80d68b1f8]<?php
for ($i=imap_num_msg($mbox); $i>=1; $i--) {
?>[/php:1:c80d68b1f8]
zmienna $i jest w tej petli numerem wiadomosci wiec wystarczy przejsc petla od $i=imap_num_msg($mbox) do 1.
Nie sprawdzalem ale powinno dzialac
pozdrawiam
WhiteFang
marian8 wielgasne dzieki!!! Dziala. Wprawdzie jescze sie nie zastanawialem jak to dziala, ale pomysle jeszcze smile.gif)

No ale jescze raz BARDZO dziekuje!!!

Pozdrawiam
djpeterek
wszystko jest ale w 18 lini cos jest nie tak bo testowalem to na 3 kontach platnych i wszedzie wychodzi to samo
Kod
Parse error: parse error, expecting `','' or `';'' in /home/dealer/main/pkg/djpeterek/web/html/poczta/index.php on line 18
WhiteFang
djpeterek, a podales dobry adres servera POP3? Ja testowalem na nastepujacych kontach:

o2.pl
risp.pl (platne)
wp.pl
simplusnet.pl (platne)
harcerz.pl (platne)
scisj.net (platne)

i na wszystkich dziala. Sprawdz jesczze raz ten serwer poczty przychodzacej POP3
djpeterek
teraz wyskakuje mi
Kod
Warning: imap_open(): Couldn't open stream {wp.pl:110/pop3}INBOX in /home/dealer/main/pkg/djpeterek/web/html/poczta/index.php on line 5



Warning: imap_num_msg(): supplied argument is not a valid imap resource in /home/dealer/main/pkg/djpeterek/web/html/poczta/index.php on line 6

Brak wiadomosci



Warning: imap_close(): supplied argument is not a valid imap resource in /home/dealer/main/pkg/djpeterek/web/html/poczta/index.php on line 26
WhiteFang
[php:1:c4df91db1e]
<?php
$server = "poczta.o2.pl";
$uzytkownik = "login";
$haslo = "haslo";

$mbox = imap_open("{".$server.":110/pop3}INBOX", $uzytkownik, $haslo);
if (imap_num_msg($mbox) == 0) {
echo "Brak wiadomosci<br>";
} else {
echo '<table border=1><tr><th>Lp</th><th>Data
nadania</th><th>Nadawca</th><th>Temat</th><th>Usuwanie</th></tr>';
$wiad_nr = (isset($_GET['wiadomosc'])) ? $_GET['wiadomosc'] : null;
for ($i=imap_num_msg($mbox); $i>=1; $i--) {
$txt = ($wiad_nr == $i);
$naglowek = imap_headerinfo($mbox,$i,80,80);
echo '<tr'.$txt.'><td>'.$i.'</td><td>'.gmdate('d-m-Y
H:i:s',$naglowek->udate).'<td>
<a href=mailto:'.$naglowek->from[0]->mailbox.'@'.$naglowek->from[0]->host.'>'.$naglowek->from[0]->mailbox.'@'.$naglowek->from[0]->host.'</a></td><td><a
href=index.php?wiadomosc='.$i.'>'.$naglowek->fetchsubject.'</a></td><td><a
href=usun.php?wiadomosc='.$i.'>usuń</a></td></tr>';
}
echo '</table>';
}

if (isset($_GET['wiadomosc'])) {
$wiadomosc = imap_headerinfo($mbox, $_GET['wiadomosc']);
echo 'Od: <a
href=mail:'.$wiadomosc->from[0]->mailbox.'@'.$wiadomosc->from[0]->host.'>'.$wiadomosc->from[0]->mailbox.'@'.$wiadomosc->from[0]->host.'</a>';
echo '<br>Tresc:<br>';
echo imap_fetchbody($mbox,$_GET['wiadomosc'],'1');
}


imap_close($mbox);
?>[/php:1:c4df91db1e]

Sproboj tego. To jest kropka w kropke skopiowane to co u mnie w 100% dziala.

A jezeli nie dziala, to cos tu na forum pisali, ze trzeba miec dostep do IMAP... chociaz ja nie wiem co to jest, ale skoro mi dziala, to widocznie ja ten dostep mam.

Takie jescze pytanie - ten skrypt odpalasz na jakims darmowym koncie czy platnym?
djpeterek
WhiteFang dziala ThX 8)
WhiteFang
djpeterek to wes porownaj to co Ci nie dzialalo z tym co napisalem, i powiedz co bylo nie tak:))
djpeterek
bledem bylo to ze ja wpisywalem o2.pl zamiast poczta.o2.pl a ty co wpisywales jak laczylem sie z wp.pl questionmark.gif
djpeterek
a na jakim servie testujesz skrypt platnym czy darmowym questionmark.gif
WhiteFang
emitra serwer poczty przychodzacej na o2.pl jest poczta.o2.pl, a nie tak jak tam wpisales o2.pl
emitra
Tak tak juz zauwazylem smile.gif i porpawilem dlategoodrazu skasowalem posta. Dziala pieknie ale mam problem z innym kontem.
Jednak tamte konto wymaga "Uierzytelnianie za pomoca uzycia bezpiecznego uwierzytelniania haslem" w outlooku moze to byc powodem i przyczyna nie dzialania skryptu smile.gif?

---------------------------------------------------------------------

Tzn sproboje sie jeszcze dowiedziec admina bo czy to mozliwe ze pop3 byl by nma innym porcie ? nei znam sie na serwrach i tych srpawach za dobrze ;]?

____________________________________________________

Nie nabijaj postow tylko uzyj Edytuj.
Seth
WhiteFang
No i wszystko pieknie dziala. Oprawe graficzna sie juz zrobilo pasujaca do srony.

Mam tylko jesczze dwie sprawy.

1. Jak spradzic czy wiadomosc jest juz przeczytana czy nie?

2. Da sie w podobny sposob wyslac wiadomosc (przez konkretne konto e-mail, a nie z localhosta)

Prosze o pomoc. Bardzo by mi na tym zalezalo.

Pozdrawiam
raf2001
2. a poco wysyłąc, z konta, wystarczy że użyjesz funkcji mail() , określonymi, prawdziwymi danymi. Na to samo wyjdzie, a skrypt bedzie mniejszy
1. Ja bym zrobił to tak wszystkie maile przechowywał w bazie (te które odebrałem), wraz z tabelką która ma domyślną wartośc np.noread, podczas pobierania danych (czy to w fukcji byś zrobił czy inaczej) update'ował bym wartość z noread na read. I problem by był z głowy
WhiteFang
mail() odpada. w naglowku wiadomosci mozna sprawdzic skad przyszedl meil... i bedzie host mojego konta (juz sprawdzalem).

co do statusu wiadomosci - to musi byc pobirane z konta pocztowego. bo jak ktos sie np zaloguje na swoje konto i przeczyta wiadomosci, to u mnie tez po zalogowanuiu maja byc oznaczone jako preczytane. bo robie portal harcerski, z wysoko rozwinietym systemem prywatnych wiadomosci, i chcem tez zrobic obsluge kont e-mail (tzn kazdy bedzie mogl loguja sie na konto, sprawdzic odrazu poczte ze swojego e-maila).

Ale dzieki za intencje:))
raf2001
niema sprawy, ale moim zdaniem dobre by było zastosowanie mail().
Ps. jak ktoś ma kodzik do WYSYŁANIA maili z własnego konta niech pokaze :wink:
raf2001
coś się chszani mimo że poczta na serwerze jest to wypisuje mi skrypt Brak wiadomości
marian8
jesli chodzi o status wiadomosci to bez kombinowania mozna to zrobic IMAPem (143) oflagowujac odpowiednio wiadomosc. Z tego co zauwazylem uzywacie POPa wiec ten wariant odpada. Trzeba wiec sciagac wiadomosci na swoj serwer i tutaj zrobic jakis mechanizm. Mozna to zrobic w ten sposob ze zapamietywany jest czas ostatniego logowania uzytkownika (najlepiej w formacie UNIXowym - pozniej latwo porownac) i pozniej porownywac ten czas z czasem odebrania wiadomosci... Mozna tez zrobic system flag...
Co do wysylania poczty nie z localhosta to jest kilka rozwiazan ktore juz na forum sie pojawialy niejednokrotnie. Mozna to zrobic funkcja mail() ustawiajac wczeniej zmienna SMTP na odpowiedni serwer (np. za pomoca [manual:b6568976ff]ini_set[/manual:b6568976ff]).
Najpierw zajrzyjcie do manuala, pozniej poszukajcie w archiwum forum, a potem do manuala...
milej zabawy
WhiteFang
nie chodzi o sprawdzenie czy sa jakies nowe wiadomosci od ostatniej wizyty, tylko czy sa jakies nieczytane (juz o tym pisalem).

A moglbys powiedziec jak sie jeszcz da jak nie przez pop3? Bo co do manuali to nie moge nigdzie znalesc nic po polsku, a z angielskim u mnie slabo:((
marian8
W takim razie musisz opracowac wlasny system flagowania wiadomosci (dodatkowe pole w tabeli z wiadomosciami opisujace jej status).

Najlepszym protokolem dla poczty przez www jest IMAP. Skrypt ktory wyslalem na poczatku dzialal wlasnie na IMAPie (port 143). Jest to protokol pozwalajacy na znacznie szersze mozliwosci (min. flagowanie wiadomosci). polecam ponizsze linki...
http://nss.et.put.poznan.pl/study/projekty.../html/imap.html
http://pl.wikipedia.org/wiki/IMAP
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-2024 Invision Power Services, Inc.