Hi,
Ich hatte heute ein wenig langeweile und hab schnell eine UDF für POP3-Server gebastelt.
Ich hatte leider noch keine Zeit es zu testen, deshalb wäre ich euch dankbar wenn ihr es mal testen könntet
Bevor ihr die Funktionen verwendet könnt, müsst ihr TCPStartup aufrufen
- POP3 UDF.au3
Spoiler anzeigen
;===============================================================================
;
; Name: POP3 UDF
; Vorraussetzungen: TcpStartup () am Anfang des Skripts
; Beschreibung: Eine UDF um mit AutoIt auf einen POP3 Server zuzugreifen.
; Autor: Carsten8
;
;===============================================================================
Global $csocket
Global $sMsg
;===============================================================================
;
; Beschreibung: Verbindet sich zu einem POP3 Server und loggt sich ein.
; Parameter: $sServer - Adresse des Pop3-Servers
; $iPort - Port über den Verbunden werden soll (meistens 110)
; $sUser - Benutzername zum einloggen (bei ua. web.de ist es die E-Mail Adresse)
; $sPass - Passwort des E-Mail Accounts
; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
; Rückgabewerte: Erfolg: Gibt 1 zurück.
; Fehler: Gibt 0 zurück zu setzt @error:
; 1 = Timeout
; 2 = Server gab einen anderen Fehler zurück
; 3 = Konnte nicht zum Server verbinden (meist falsche Adresse oder Port)
; 4 = Benutzername und/oder Passwort falsch
;===============================================================================
Func _pop3_connect($sServer, $iPort, $sUser, $sPass, $timeout = 10000)
$csocket = TCPConnect($sServer, $iPort)
If @error = 1 Then
$csocket = TCPConnect(TCPNameToIP($sServer), $iPort)
EndIf
If $csocket = -1 Then
SetError(3)
Return 0
EndIf
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(1)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
Until StringLeft($Recv, 3) = "+OK"
TCPSend($csocket, "USER " & $sUser & @CRLF)
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(1)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
Until StringLeft($Recv, 3) = "+OK"
TCPSend($csocket, "PASS " & $sPass & @CRLF)
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(1)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
If StringLeft($recv, 4) = "-ERR" Then
SetError(4)
Return 0
EndIf
Until StringLeft($Recv, 3) = "+OK"
Return $csocket
EndFunc
;===============================================================================
;
; Beschreibung: Gibt die Anzahl und die Größe der E-Mails auf dem Server zurück
; Parameter: $socket - Serversocket
; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
; Rückgabewerte: Erfolg: Setzt @error auf 0 und gibt ein Array mit folgenden Daten zurück:
; $array[0] = Anzahl der E-Mails
; $array[1] = Größe aller E-Mails in Bytes
; Fehler: Setzt @error auf 1 bei einem unbekannten Fehler (2 bei Timeout und gibt 0 zurück)
; und gibt den vom Server gesendeten Fehler zurück.
;===============================================================================
Func _pop3_info($socket, $timeout = 10000)
TCPSend($socket, "STAT" & @CRLF)
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(2)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
If StringLeft($recv, 4) = "-ERR" Then
SetError(4)
Return $recv
EndIf
Until StringLeft($Recv, 3) = "+OK"
$sTrim = StringTrimLeft($recv, 4)
$split = StringSplit($sTrim, " ")
Dim $aStat[2]
$aStat[0] = $split[1]
$aStat[1] = $split[2]
Return $aStat
EndFunc
;===============================================================================
;
; Beschreibung: Empfängt eine E-Mail mit ihrem Header
; Parameter: $socket - Serversocket
; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
; $iMail - Die Nummer der E-Meil zum Empfangen
; Rückgabewerte: Erfolg: Gibt die E-Mail zurück
; Fehler: Gibt 0 zurück und setzt @error bei einem Timeout auf 1 (bei anderen Fehlern 0)
;===============================================================================
Func _pop3_getmailraw($socket, $iMail, $timeout = 10000)
TCPSend($socket, "RETR " & $iMail & @CRLF)
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(1)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
If StringLeft($recv, 4) = "-ERR" Then
SetError(0)
Return 0
EndIf
Until StringLeft($recv, 3) = "+OK"
$split = StringSplit($recv, @CRLF)
For $i = 2 to $split[0] - 1
$sMsg &= $split[$i] & @CRLF
Next
Return $sMsg
EndFunc
;===============================================================================
;
; Beschreibung: Löscht eine E-Mail vom Server
; Parameter: $socket - Serversocket
; $timeout - Gibt an, wie lange auf eine Antwort gewartet werden soll (Standart: 10 Sek.).
; $iMail - Die Nummer der E-Meil zum Empfangen
; Rückgabewerte: Erfolg: Gibt 1 zurück
; Fehler: Gibt 0 zurück und setzt @error bei einem Timeout auf 1 (bei anderen Fehlern 0)
;===============================================================================
Func _pop3_deletemail($socket, $iMail, $timeout = 10000)
TCPSend($socket, "DELE " & $iMail & @CRLF)
$iTimer = TimerInit ()
Do
If TimerDiff ($iTimer) > $timeout Then
SetError(1)
Return 0
EndIf
$recv = TCPRecv($csocket, 1024)
If StringLeft($recv, 4) = "-ERR" Then
SetError(0)
Return 0
EndIf
Until StringLeft($recv, 3) = "+OK"
Return 1
EndFunc
;===============================================================================
;
; Beschreibung: Trennt die Verbindung zum Server
; Parameter: $socket - Serversocket
; Rückgabewerte: Keine
;===============================================================================
Func _pop3_disconnect($socket)
TCPSend($socket, "QUIT" & @CRLF)
TCPCloseSocket($socket)
EndFunc
-Sehr einfaches Beipsiel (Empfängt die erste E-Mail auf dem Server, gibt diese aus und löscht sie.)
Spoiler anzeigen
#include <POP3 UDF.au3>
;Ab hier ändern
$server = "pop3.web.de"
$port = 110
$user = "max.musterman@web.de"
$password = "musterpasswort"
;Ab hier nichts mehr ändern
TCPStartup()
$pop3sock = _pop3_connect($server, $port, $user, $password)
$pop3info = _pop3_info($pop3sock)
MsgBox(0, "Ergebnis", "Auf dem Server sind " & $pop3info[0] & " E-Mails mit einer Größe von " & $pop3info[1] & " Bytes.")
$mail = _pop3_getmailraw($pop3sock, 1)
MsgBox(0, "E-Mail 1", $mail)
_pop3_deletemail($pop3sock, 1)
_pop3_disconnect($socket)
Todo: IMAP und SMTP
Viel Spaß