[PHP] PHP en POP (mail), RETR probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 09:24

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
Ik probeer een script te maken dat een bepaalde pop-account leegtrekt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    $mail['server'] = "server";
    $mail['poort']  = "110";
    $mail['user']   = "user";
    $mail['pass']   = "pass";
    
    $mv = fsockopen($mail['server'], $mail['poort']);
    $i  = 0;    // counter van regels
    $j  = 0;    // counter van gelezen mails
    while( $line = fgets($mv, 128) ){
        echo $line;
        
        if( $i == 0 ) $tb = "USER " . $mail['user'];
        if( $i == 1 ) $tb = "PASS " . $mail['pass'];
        
        if( $i == 2 ){
            $str = str_replace("+OK " . $mail['user'] . " has ", "", $line);
            $str = explode(' ', $str);
            $num_msg = $str[0];
            $cur_msg = 
            $tb = "RETR $num_msg";
            
        }
        
        //if( $i == 3 ) $tb = "QUIT";
        
        if( $tb != "" ) fputs($mv, "$tb\r\n");
        
        $i++;
    }
    
    fputs($mv, "QUIT\r\n");


Zoals je ziet heb ik een probleem met het loopen bij het retrieven van de mails. Dit is de output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+OK [server]
+OK Password required for [user]
+OK [user] has 1 visible message (0 hidden) in 972 octets.
+OK 973 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
+OK 973 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
+OK 973 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
+OK 973 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
+OK 973 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets
Received: from smtp10.wxs.nl ([195.121.6.35])
OK 972 octets

Zoals je ziet blijft hij de hele tijd dezelfde mail ophalen, en dat is ook logisch. Elke keer dat er een regel binnekomt uit de socket en $i = 2 word de retrieve-opdracht immers opnieuw verstuurd.

Nu moet ik dus een statement hebben die ervoor zorgt dat hij niet elke keer opnieuw de mail retrieved, maar ik kan er maar niet opkomen :?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

if( $tb != "" ) fputs($mv, "$tb\r\n");
De $tb blijft iedere keer "retr"

Skill is when luck becomes a habit.


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 09:24

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
Ja, inderdaad. Nu moet ik dus zoiets zien te vogelen, dat hij dat alleen doet als hij niet nog iets aan het ontvangen is. Maar hoe is de vraag :?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 09:24

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Topicstarter
Ik heb het :) $tb moet je unsetten, en een iets andere constructie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
while( $line = fgets($mv, 128) ){
        echo $line;
        
        if( $i == 0 ) $tb = "USER " . $mail['user'];
        if( $i == 1 ) $tb = "PASS " . $mail['pass'];
        
        if( $i == 2 ){
            $str = str_replace("+OK " . $mail['user'] . " has ", "", $line);
            $str = explode(' ', $str);
            $num_msg = $str[0];
            
            if( $num_msg != 0 ){
                if( $lb == 0){
                    $tb = "RETR $num_msg";
                    $lb++;
                } else {
                    $tb = "";
                }
            } else {
                $i++;
            }
        }
        
        if( $i == 3 ) $tb = "QUIT";
        
        echo $tb."\n";
        if( $tb != "" ) fputs($mv, "$tb\r\n");
        unset( $tb );
        $i++;
    }


Hurray :)

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.