Da heute die Frage gestellt wurde, wie man denn Anhänge runterläd und ich dieses Problem lösen konnte, hab ich mir gedacht, ich mach daraus mal ne UDF.
Erklärung: Eine E-Mail besteht aus mehreren Teilen. Einer dieser Teile ist der Anhang. Dieser ist in Base64 verschlüsselt, also entschlüsselt dieses Script diesen Code und gibt einen Array bestehend aus dem Namen der Datei und dem entschlüsselten Text. Nun muss man nurnoch eine Datei mit dem Dateinenamen erstellen und dort den entschlüsselten Code reinschreiben (-->siehe Beispiel)
Funktion: _getanhang($v_text)
$v_text Text, der aus _POP3Retr(), bzw. _downloadmail() entstanden ist.
Rückgabe:
$rueckgabe Zurückgegebener Array
$rueckgabe[0] Decodierter Anhang
$rueckgabe[1] Name der Datei im Anhang
Funktion _downloadmail()
Kleines Auswahlmenü zum auswählen und runterladen der gewünschten E-Mail
Rückgabe:
$data Der Text der E-Mail (Mit Anhang) -->Siehe Beispiel
Beispiel:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.5.4 (beta)
Author: Cartan12
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]#include <POP3.au3>
#include <File.au3>
#include <Anhang.au3>
$conn = _POP3Connect($benutzer,$pass,$popserver)
If $conn == 0 Then
MsgBox(0,"","Keine Verbindung")
Else
$mails = _POP3Info()
If $mails <> 0 Then
$mail = _downloadmail() ; Neue Funktion - Keines Auswahlmenü der Vorhandenen E-Mails
_FileCreate(@DesktopDir & "\mail.txt")
FileWrite(@DesktopDir & "\mail.txt",$mail)
$anhang = _getanhang($mail)
_ArrayDisplay($anhang)
If $anhang <> "" Then
_FileCreate(@DesktopDir & "\" & $anhang[1])
FileWrite(@DesktopDir & "\" & $anhang[1],$anhang[0])
EndIf
EndIf
EndIf
Anhang UDF:
Spoiler anzeigen
#include <Array.au3>
#include <String.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include-once
Func _Base64Decode($Data)
Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
DllStructSetData($CodeBuffer, 1, $Opcode)
Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
"str", $Data, _
"ptr", DllStructGetPtr($Ouput), _
"int", 0, _
"int", 0)
Return BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0])
EndFunc
Func _getanhang($v_text)
Local $pos, $split, $split2, $split3, $string2, $encodet, $string1
$pos = StringInStr($v_text,'boundary="')
If StringInStr($v_text,"Content-Type: multipart/mixed;") <> 0 And $pos <> 0 Then
$searchstring = _StringBetween($v_text,'boundary="','"')
$split = StringSplit($v_text,$searchstring[0],1)
$split3 = StringSplit($split[$split[0]-1],'filename="',1)
$string2 = _StringBetween($split3[2],"",'"')
$split2 = _StringBetween($split[$split[0]-1],'filename="' & $string2[0] & '"',"")
If StringInStr($split[$split[0]-1],"Content-Type: text") <> 0 Then
$string1 = StringTrimLeft($split2[0],4)
$encodet = StringTrimRight($string1,2)
Else
$encodet = _Base64Decode($split2[0])
EndIf
Local $rueckgabe[2] = [$encodet, $string2[0]]
Return $rueckgabe
EndIf
Return 0
EndFunc
Func _downloadmail()
Local $Form1, $Combo1, $i, $Button1, $Msg, $data, $mail, $v_mails
$v_mails = _POP3Info()
If $v_mails[0][0] = 0 Then
MsgBox(0,"!","Keine E-Mails auf dem Server vorhanden!")
Exit
EndIf
$Form1 = GUICreate("E-Mails", 186, 132, 229, 149)
$Combo1 = GUICtrlCreateCombo("", 24, 40, 145, 25)
For $i = 1 To $v_mails[0][0]
GUICtrlSetData(-1,$i & "= " & $v_mails[$i][3])
Next
$Button1 = GUICtrlCreateButton("Download", 48, 80, 75, 25)
GUISetState(@SW_SHOW)
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If GUICtrlRead($Combo1) = "" Then ContinueLoop
$data = StringSplit(GUICtrlRead($Combo1), "=")
GUIDelete()
$mail = _POP3Retr($data[1])
Return $mail
EndSwitch
WEnd
EDIT: _downloadmail()-Funltion hinzugefügt. _downloadmail Erstellt eine kleine GUI, in der man die gewünschte E-Mail runterladen kann. Viele, viele Bugs behoben, die UDF sollte jetzt ohne Probleme funktionieren...