Ik heb me ondertussen alle mogelijkheden geprobeerd die ik ken, maar kom er niet uit. Ook de search helpt me niet bij dit probleem dus ik zit echt helemaal vast.
Het probleem:
Ik ben bezig met een script die verbinding maakt met een SMTP server waarvoor Authenticated login nodig is. Nu is dat geen probleem en kan ik het AUTH LOGIN commando versturen met goede reactie. Daarop volgend de gebruikersnaam met goed resultaat, maar als ik het wachtwoord verstuur krijg ik ineens geen reactie meer. Dit terwijl het wachtwoord wel correct is (en zelfs als ie niet correct was had ie toch een error code moeten terug geven?).
Dit is de functie die ik ervoor wilde gebruiken. Is een class-functie met enige debug regels:
De reactie van de server op deze manier is:
Weet iemand wat er mis gaat?
Het probleem:
Ik ben bezig met een script die verbinding maakt met een SMTP server waarvoor Authenticated login nodig is. Nu is dat geen probleem en kan ik het AUTH LOGIN commando versturen met goede reactie. Daarop volgend de gebruikersnaam met goed resultaat, maar als ik het wachtwoord verstuur krijg ik ineens geen reactie meer. Dit terwijl het wachtwoord wel correct is (en zelfs als ie niet correct was had ie toch een error code moeten terug geven?).
Dit is de functie die ik ervoor wilde gebruiken. Is een class-functie met enige debug regels:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
| public function Authenticate($username, $password){ print "Connectie verifieren...<BR>"; if(!$this->Connected()) return false; print "Verbonden<BR>"; print "HELO commando versturen...<BR>"; if(!$reply = $this->getSocketDataFromCommand("EHLO localhost")) return false; print "HELO commando verstuurd en data ontvangen<BR>"; print "Reactie controleren...<BR>"; if(!$this->matchCode($reply[0], 250, "HELO command refused", 204)) return false; print "Reactie ok<BR><BR>"; print "Geaccepteerde commandos:<BR>"; foreach($reply as $command) print $command."<BR>"; print "<BR>"; print "Auth commando versturen...<BR>"; if(!$reply = $this->getSocketDataFromCommand("AUTH LOGIN")) return false; print "Auth commando verstuurd en data ontvangen<BR>"; print "Reactie controleren...<BR>"; if(!$this->matchCode($reply[0], 334, "Authenticated login not supported by server", 201)) return false; print "Reactie ok<BR>"; print "Gebruikersnaam versturen...<BR>"; if(!$reply = $this->getSocketDataFromCommand(base64_encode($username))) return false; print "Gebruikersnaam verzonden en data ontvangen<BR>"; print "Reactie controleren...<BR>"; if(!$this->matchCode($reply[0], 334, "Username refused. ".$reply[0] , 202)) return false; print "Reactie ok<BR>"; print "Wachtwoord versturen...<BR>"; if(!$reply = $this->getSocketDataFromCommand(base64_encode($password)))return false; print "Wachtwoord verzonden en data ontvangen<BR>"; print "Code controleren...<BR>"; if(!$this->matchCode($reply[0], 235, "Password refused. ".$reply[0], 203))return false; print "Code ok<BR>"; print "Authenticatie succesvol!<BR>"; return true; } |
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
32
33
34
35
36
37
| protected function getSocketData($return_type="array") { if(!$this->Connected()) return false; $break = false; while($str = fgets($this->con,1024)) { if(!$str){ $this->error = "Failed to retrieve data"; $this->errno = 501; throw new Exception($this->error, $this->errno); return false; } if(substr($str,3,1) == " ")$break = true;; switch(strtolower($return_type)){ case "string": $data .= "\n".$str; break; case "array": default: $data[] = $str; } if($break) break; } return $data; } public function getSocketDataFromCommand($command, $return_type="array"){ // Execute command and get results if(!$this->Connected()) return false; if(ereg("\n", $command)) $command = ereg_replace("\n.*$", "", $command); // search and remove any line-end data to prevent a double line-end if(ereg("\r", $command)) $command = ereg_replace("\r.*$", "", $command); // and also remove any commands afterwords fputs($this->con, $command."\r\n"); // now add the line-end once if(!$result = $this->getSocketData($return_type)) return false; return $result; } |
De reactie van de server op deze manier is:
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
27
| Connectie verifieren... Verbonden HELO commando versturen... HELO commando verstuurd en data ontvangen Reactie controleren... Reactie ok Geaccepteerde commandos: 250-helderhosting.nl 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250 8BITMIME Auth commando versturen... Auth commando verstuurd en data ontvangen Reactie controleren... Reactie ok Gebruikersnaam versturen... Gebruikersnaam verzonden en data ontvangen Reactie controleren... Reactie ok Wachtwoord versturen... |
Weet iemand wat er mis gaat?
telefoontoestel