Script php: Leggere mail da account pop3 con php

   difficoltà:  script script script script script

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);
?>


Social:


Donazione:
Se questo script ti grave; stato utile e ti ho fatto risparmiare tempo e denaro fai una
qualsiasi cifra è ben accetta! 1€, 3€, 5€ ,10€, 50€ ;-) fai te!


Permalink: Tag:
script   php   e-mail   pop3   imap  
Script Simili: Permalink: Link utili:
Tools:
Feed RSS     Download  



Commenti


  MarcoMM

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

  Alessio

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?

  Fabio

27/1/2008 11:36:30

Prova a mettere invece del pop3 l' imap di libero. dovrebbe essere:
imapmail.libero.it

  Alessio

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à...

  Fabio

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...

  Alessio

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.

  Fabio

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..

  Alessio

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...



  Fabio

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.

  Alessio

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...

  Fabio

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..

  Stefano

2/4/2008 12:57:36

Ma per leggere il corpo del messaggio come devo fare?
grazie in anticipo

  lol21

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

  Luca

13/11/2008 12:41:43

ciao, si deve fare cos' per l'imap:
$mailbox = imap_open("{imapmail.libero.it:143}INBOX", "user", "pass");

  giovanni di canto

30/8/2009 12:39:12

non risco a leggere le e mail

  Paolo

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

  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

  Paolo

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 ^_^

  Fabio

12/6/2010 11:52:33

se dice che non è definita la funzione è probabile che non sia attivo il modulo sul server

  Paolo

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

^_^

  fabio

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

  Paolo

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ò ^_^


  daniele

12/2/2011 11:59:20

ciao sto provando anch'io lo script, applicandolo alle mail fallite dopo una newsletter.
solo che non riesco a ricavare quali email falliscono, nell'$headers->toaddress mi esce la mia casella di posta elettronica dove faccio convergere i messaggi errati (praticamente quella stessa che sto leggendo con lo script)

nel mail() uso
mail($destinatario, $oggetto, $messaggio, $headers, "-f postmaster@sito.it");

quando vado a leggere la mail postmaster@sito.it con lo script nel campo $headers->toaddress mi ritrovo sempre "postmaster@sito.it" e non la mail errata.

si può risolvere? grazie

  Albert

5/4/2011 17:29:07

puoi completare lo script anche con body e attach ?

  criz

2/4/2014 11:38:14

GRAZIE DAVVERO per questo stupendo SCRIPT. Ho decommentato la riga del modulo php_imap, ho messo le credenziali dell'account libero e funge tutto è STUPENDO. La donazione te la meriti, mi hai salvato il culo. ;)

  Maurizio

19/7/2014 0:20:35

Salve,
lo script è ottimo ma ho un problema, vorrei visualizzare la mail dell'utente e non il nome.
La variabile $mittente mi va a visualizzare il nome che l'utente imposta sulla casella mail, riporto in seguito l'esempio:

Mittente: PayPal
Oggetto: Promemoria - PayPal ha bisogno dei tuoi suggerimenti
Data: 21/6/2014 15:45:57

a me servirebbe visualizzare invece:

Mittente: assistenza@paypal.com
Oggetto: Promemoria - PayPal ha bisogno dei tuoi suggerimenti
Data: 21/6/2014 15:45:57

è possibile?
Grazie in anticipo




Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.