Also was du vorhast solltest du eher mit einem Shell Script und Cron machen.
Wenn du das Unbedingt mit PHP machen willst werfe die Schleifen weg und sehe dir die Imap Funktion in PHP an. Denn es ist Wichtig das die Nachrichten geflaggt werden. Sonst haben dein E-Mail Clienten massive Probleme
PHP-Code:
public function SetSpamMailByID( $id = 0 )
{
if ( (int)$id == 0 )
return false;
// DebugToLog( array( $Header, imap_last_error() ) );
$Header = imap_headerinfo( $this->IMAP, $id );
if ( is_object( $Header ) && (int)$Header->Msgno >= 1 )
{
imap_setflag_full( $this->IMAP, $Header->Msgno, '\\Seen \\Flagged' );
if ( array_key_exists( 'Spam', $this->MBOXES ) )
{
$b = imap_mail_move( $this->IMAP, $Header->Msgno, "INBOX.Spam" );
imap_expunge( $this->IMAP );
// DebugToLog( $b );
return $b;
} else
return false;
} else
return false;
}
Mit Cron - Das ist im Übrigen auch meine Variante - geht das schneller.
Denn es gibt nur einen Benutzer der lernen muss das ist entweder spamd oder der amavis Daemon.
Bei mir sieht jede Stunde cron.hourly in Jeden Benutzer Spam Postfach nach Mails.
Code:
#!/bin/bash
umask 022
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
# get information from /etc/sysconfig
if [ -f /etc/sysconfig/cron ] ; then
. /etc/sysconfig/cron
fi
VIRTUAL=/var/spool/virtual_mailboxes
AMAVISD_DB=/var/spool/amavis/var
VIRTUAL_DB=/var/spool/virtual_mailboxes/my-domain.de
if [ -d $VIRTUAL ] ; then
echo "sa-learn [`date +"%T"`]" >> /var/log/spamassassin-sa-learn.log
for i in `find $VIRTUAL -mindepth 2 -maxdepth 3 -type d` ; do
if [ -d $i/.Spam ] ; then
for mfile in `find $i/.Spam -type f -exec grep -l '^X\-' {} \;` ; do
if [ ! -n "`grep 'application\/pgp' $mfile`" ] ; then
echo $mfile >> /var/log/spamassassin-sa-learn.log
/usr/bin/sa-learn --dbpath $AMAVISD_DB/.spamassassin --spam $mfile > /dev/null
/usr/bin/sa-learn --dbpath $VIRTUAL_DB/.spamassassin --spam $mfile > /dev/null
rm -f $mfile
fi
done
rm -f $i/.Spam/*/.avrc
fi
done
chown -R vscan.vscan $AMAVISD_DB
chown -R popuser.popuser $VIRTUAL_DB
fi
exit 0
Ich füttere in diesem Fall Zwei Benutzer einmal Amavis das von Postfix aufgerufen wird und einmal Virtual was ein ACL Postfach von Courier ist.
Lesezeichen