Newsgroup: it.comp.www.php
Titolo: Urgente: leggere una mailbox

Salve, come si fa a leggere una mailbox (server pop3) da uno script php? La
cosa potrebbe essermi utile x creare una webmail. Questo sembra essere un
argomento tabů nelle varie documentazioni PHP.
Grazie

 un argomento tabù nelle varie documentazioni PHP.
Le funzioni elencate nel manuale, alla voce "imap functions", fanno
al caso tuo, contrariamente a quanto il nome possa far credere.
Le versioni piu' recenti della libreria imap permettono infatti
di accedere anche a server POP3 e NNTP.
Se non vuoi usare queste funzioni, esistono varie classi gia'
disponibili per la gestione del protocollo POP3; tempo fa ne ho
scritta una anche io che tra le altre cose permetteva anche il
supporto MIME, ma ho abbandonato il progetto proprio perche'
tutte le funzioni necessarie sono gia' disponibili con PHP.
Se interessa a qualcuno posso comunque pubblicarla da qualche parte.
Ci sono poi anche svariati software gia' pronti per il web-mail...
Ciao,
--
Davide


wrote:


argomento tabų nelle varie documentazioni PHP.
Puoi farlo con fsockopen(). E forse puoi portare questo script qua, con
le opportune modifiche (traduzione in romanesco (C) Giggi de Trastevere
detto "Er Bugia"). Il resto dei comandi POP lo trovi nella RFC.
#!/usr/bin/perl
require 5.002;
use strict;
use IO::Socket;
my ($remote, $kill, $host, $line, $msgs, $size, $pop_user, $pop_pass);
$host     = shift;
$pop_user = shift;
$pop_pass = shift;
$kill     = shift;
unless ($pop_pass) { die "Sintasse: defuser mailhost username
passwōrd\n" }
$remote = IO::Socket::INET->new(
    Proto     => "tcp",
    PeerAddr  => $host,
    PeerPort  => "pop3(110)",
);
unless ($remote) { die "Ar poppe de $host nun je posso fa' gnente." }
$line=<$remote>;
#$remote->autoflush(1);
if ( $line =~ /^\+OK/ )
{
    print "'anvedi, m'arisponne: $line";
}
else
{
    die "$host 'un risponne, 'n c'e' gnente da fa'!";
}
print $remote "USER $pop_user\n";
$line=<$remote>;
unless ( $line =~ /^\+OK/ ) { die "'sto fijo de mignotta nun me fa
entra'!\n" }
print $remote "PASS $pop_pass\n";
$line=<$remote>;
unless ( $line =~ /^\+OK/ ) { die "'sto fijo de mignotta nun me fa
entra'!\n" }
print $remote "STAT\n";
$line=<$remote>;
if ( ($msgs, $size) = ($line =~ /^\+OK\s+(\d+)\s+(\d+).*/))
{
    print "'mazza aho', c'hai $size bites in $msgs messaggi de posta\n";
}
else
{
    die "STAT m'arisponne: $line";
}
if ( $size < 131072 && $msgs < 32 )
{
    print "Per esse' 'na bomba, vojo vede' armeno 128 K o 32
messaggi.\n";
    print "Questa mailbox nun cia' bbombe. Bonaaaa\n";
    close $remote;
    exit;
}
print $remote "LIST\n";
my %message_size;
%message_size=();
LISTER: while (<$remote>)
{
    my ( $msgnum, $msgsize );
    last LISTER if /^\./;
    $line = $_;
    if (( $msgnum, $msgsize ) = ($line=~ /(\d+)\s(\d+)/))
    {
        push @{ $message_size { "$msgsize" } }, $msgnum;
    }
}
my ($msgsize, $count, $this_size, $n);
print "Rimboccamosi le maniche...\n";
foreach $msgsize ( keys %message_size ) {
    $count=$#{ $message_size{ $msgsize } };
    if ( ($count*3 > $msgs) || $count > 10 || $msgsize > 131072 )
    {
        foreach $n ( 0 .. $#{ $message_size{ $msgsize } } )
        {
            print $remote "DELE $message_size{ $msgsize }[$n]\n";
            $line=<$remote>;
        }
    }
}
if ($kill)
{
    my $delete;
    for $n ( 1 .. $msgs )
    {
        $delete = 0;
        print $remote "TOP $n 0\n";
        $line=<$remote>;
        if ( $line =~ /^\+OK/ )
        {
SCANNER:        while (<$remote>)
            {
                    last SCANNER if /^\./;
                $line = $_;
                if ( $line =~ /^.*($kill).*/ )
                {
                    $delete=1;
                }
            }
        }
        if ($delete)
        {
            print $remote "DELE $n\n";
            $line = <$remote>;
        }
    }
}
else
{
    "Nessuna ricerca controllata in programma.\n";
}
print $remote "QUIT\n";
$line=<$remote>;
print "Ovvia, dotto', io avrei finito.\n";
close $remote or die "Close socket: $!";
exit;
Leonardo
-- 
".signature": bad command or file name

 
Se sei convinto tu... ;)
Leo, sei sempre un mito (dai tempi di Fidonet)!
--
Davide