Script php: Leggere mail da account pop3 con php
difficoltà:

Download
Script simili
5/6/2007
Con questo script potremo, inserendo i dati di accesso al nostro account di posta, controllare le e-mail in arrivo. Per far questo dobbiamo innanzitutto assicurarci che il modulo php_imap sia attivo sul nostro server. Se stiamo lavorando in locale con EasyPHP bisogna attivarlo perchè di default è disattivato. Per attivarlo cliccare sull'icona di EasyPHP alla voce Configurazioni->Estensioni PHP e checkare php_imap, quindi riavviare il server.
A questo punto con la funzione imap_open potremo attivare la connessione al server di posta. Vediamo come.
Alla funzione imap_open dobbiamo passare come parametri una stringa di connessione servermail, username e password dell'account.
<?
$pop3="pop3.dominio.com";
$username="user@dominio.com";
$password="password";
if($inbox=@imap_open("{".$pop3."/pop3:110}INBOX", $username, $password)){
echo "Siamo connessi all'account mail selezionato";
}else{
echo "Impossibile connettersi all'account mail selezionato";
}
imap_close($inbox);
?>
Se siamo connessi possiamo fare un ciclo su tutti i messaggi trovati nella casella di posta e tramite la funzione imap_header prelevare gli headers di tutte le mail quindi visualizzare ad esempio mittente, data, oggetto. Il ciclo verrà fatto a ritroso per visualizzare prima le ultime mail arrivate.
Vediamo quindi lo script completo per leggere le intestazioni delle mail giunte al proprio account:
<?
$pop3="pop3.dominio.com";
$username="user@dominio.com";
$password="password";
if($inbox=@imap_open("{".$pop3."/pop3:110}INBOX", $username, $password)){
$messaggi_totali=imap_num_msg($inbox);
echo "<b>Totale messaggi:</b> $messaggi_totali<br/><br/>";
for($m=$messaggi_totali; $m>0; $m--){
$headers=imap_header($inbox, $m);
$mittente= $headers->fromaddress;
$oggetto=$headers->subject;
$data=date("j/n/Y G:i:s",strtotime($headers->date));
echo "<b>Mittente:</b> $mittente<br/>";
echo "<b>Oggetto:</b> $oggetto<br/>";
echo "<b>Data:</b> $data<br/><br/>";
}
}
imap_close($inbox);
?>
Permalink:
Tag:
Script Simili:
Script php: Leggere file xls di excel con php
Script php: Invio mail in formato html con allegato
Script asp: Leggere un file xml o un feed rss con asp
Script javascript: Form di invio mail lato client
Link utili:
Vota:
Commenti
26/1/2008 16:07:12
Ho provato ad usare lo script per leggere le email dal server di Libero (popmail.libero.it), ma non ci sono riuscito. Non so se viene o meno stabilita la connessione, poiché quando accedo alla pagina, non viene visualizzata nessuna tabella HTML, né un eventuale messaggio di errore che farei stampare se la connessione non viene stabilita. Sai per caso se è possibile leggere email dal server di Libero?
27/1/2008 11:36:30
Prova a mettere invece del pop3 l' imap di libero. dovrebbe essere:
imapmail.libero.it
28/1/2008 15:53:01
ho provato come dici, cioè cambiando solo due righe, che diventerebbero:
$pop3="imapmail.libero.it"; e
if($inbox=@imap_open("{".$pop3."/imap4:110}INBOX", $username, $password))
ma dà lo stesso problema. Eppure dal file access.log di apache, quando accedo alla pagina (che ho chiamato InBox2.php), viene inserita la riga:
127.0.0.1 - - [28/Jan/2008:15:44:41 +0100] "GET /InBox2.php HTTP/1.1" 200 305
chissà...
28/1/2008 16:39:47
forse ho capito... prova a togliere da
if($inbox=@imap_open.....
la chiocciola se ti dice
undefined function imap_open()
vuol dire che non è attivata l'estensione. Se usi easyphp in locale, basta che fai tasto destro su icona:
Configurazione>Estesioni PHP
e attivi
php_imap
c'è un'alta cosa altrimenti.. libero nega l'accesso se non ti colleghi con l'adsl di libero se non sbaglio...
28/1/2008 17:43:33
Il problema rimane anche togliendo la chiocciola. Comunqe, sapevo che senza una connessione ADSL libero (come nel mio caso) non puoi leggere le email di dominio Libero attraverso i programmi più comuni come Outlook Express, Thunderbird, eccetera, ma non che libero negasse completamente l'accesso al servizio. Avendo una connessione Alice ADSL, cercavo proprio un metodo per leggere le email, diverso dall'accesso via web...
Grazie di tutto.
28/1/2008 17:46:30
io ho attivatio php_imap e fatto un test su una mia casella libero. Visto i tempo che impiega secondo me tenta l'accesso, ma gli è negato..
28/1/2008 18:44:05
mmm...quindi anche tu non hai una connessione Libero, e quindi da lo stesso mio problema (cioè visualizza una pagina vuota)?
In ogni caso, quanto tempo impiega su per giù? Nel mio caso pochi istanti, e, proprio come dici, dà l'idea che tentasse l'accesso al server, ma inutilmente...
28/1/2008 20:22:48
togliendo la @ visualizza un errore. ho fatto alcune prove sia con imap che pop3. in un caso ci metteva un attimo e dava errore in un atro una 20 di sec.
29/1/2008 11:24:24
Mah a me non ha mai impiegato una ventina di secondi, ma solo pochi istanti...cmq devo vedere se riesco a trovare un'altra soluzione, magari con un altra tecnologia...
29/1/2008 13:00:25
Se il tuo problema è solo leggere le mail di libero senza la connessione, cerca bene...in giro ci sono delle applicazioni che fanno da ponte e ti permettono anche di scaricarla con outlook.. io ne usavo una..ma nn ricordo il nome..
2/4/2008 12:57:36
Ma per leggere il corpo del messaggio come devo fare?
grazie in anticipo
14/6/2008 19:02:06
con libero provate a non mettere la porta del server, spesso l'antivirus non la riconosce bn.
Stefano, per leggere il messaggio intero devi usare la funzione imap_body();
ti consiglio di leggerti http://it2.php.net/manual/it/function.imap-body.php
spero di essere stato utile
buona navigazione
13/11/2008 12:41:43
ciao, si deve fare cos' per l'imap:
$mailbox = imap_open("{imapmail.libero.it:143}INBOX", "user", "pass");
30/8/2009 12:39:12
non risco a leggere le e mail
22/4/2010 17:54:30
Ciao,
riesco a collegarmi al server e a recuperare correttamente le email ma ho notato che vedo se il destinario o il cc comprende più indirizzi, la funzione imapheader() restituisce solo il primo indirizzo.
Come è possibile risolvere questo problema?
Grazie mille!!!
Paolo
12/6/2010 10:46:38
Ciao sto provando lo script e mi esce questo errore:
"Fatal error: Call to undefined function imap_open() in [...]".
Potete aiutarmi?
Grazie
12/6/2010 10:49:22
Dimenticavo: "non uso EasyPHP" e il messaggio compare sia da locale che sul server web.
Inoltre il servizio web mail è impostato sia in pop3 che imap.
Help me please ^_^
12/6/2010 11:52:33
se dice che non è definita la funzione è probabile che non sia attivo il modulo sul server
13/6/2010 18:40:36
Grazie Fabio ^_^
Sai come posso attivare il modulo?
So che c'è da metter mano su php.ini - e l'ho fatto togliendo il ";" da extension = php_imap.dll Poi so che dovrei mettere lo stesso file php_imap.dll in una directory, ma non capisco se va bene ext - quella creata da php durante l'installazione - o devo crearne un'altra.
E' giusto questo procedimento? E se sì, dove sto sbagliando?
Ti ringrazio... soprattutto per il sito, fonte inesauribile di tutto ciò che in rete non si trova
^_^
14/6/2010 16:56:11
se c'è già la dll basta decommentare la riga come hai fatto. Io pero' in locale uso wamp e c'è già tutto installato basta attivare e disattivare le estensioni com hai fatto te
15/6/2010 17:17:42
Ciao ho risolto!
Anzichè manipolare il php.ini presente nella directory C:\Windows\ ne manipolavo un altro.
Ora sono al passaggio successivo, quello in cui mi compare questo:
Warning: imap_open() [function.imap-open]: Couldn't open stream {mail.miosito.it/pop3:143}INBOX
Sono sicuro che ce la farò ^_^

Feed Rss
14/6/2007 15:51:49
Grazie. Script interessantissimo ed utilissimo!
Però credo che per Gmail non funzioni:
http://mail.google.com/support/bin/answer.py?answer=10339&hl=it