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ß ![]()