hab ein kleines Programm geschrieben das eine Email an Beliebig viele Empfänger verschickt. Dabei ist die Zeit die zwischen dem verschicken jeder einzelnen Email vergeht einstellbar. Die einzelenen Email Adressen entnimmt es dabei aus einer Textdatei, in der jede Email Adresse in einer neuen Zeile Stehen muss. Feheler und Erfolgsmeldungen werden in der Console angezeigt und in einer Textdatei im gleichen Verzeichnis als log.txt gespeichert.
Zum compilieren wird die PureSmtp Libery aus PureArea.net gebraucht.
Sinn ist das Verschicken an sehr viele Empfänger (>100), so das man die Verteiler Funktion von Outlook nicht mehr verwenden kann.
Bitte entschuldigt den etwas chaotischen Stil, aber ich brauchte mal schnell so ein Programm.
Code: Alles auswählen
;- Window Constants
;
Enumeration
#Window_0
#Window_Einstellungen
#Window_Wait
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_EmailListe
#Text_10
#Button_Suchen
#Text_15
#String_Betreff
#Text_17
#Editor_Text
#Button_Senden
#Button_Einstellungen
#Text_0
#Text_1
#Text_3
#Text_5
#Text_7
#Text_9
#String_Server
#String_User
#String_PW
#String_MailFrom
#String_Delay
#Text_12
#String_Port
#Button_0
#Progressbar
#PrText
EndEnumeration
Global Delay
Structure SmtpServer
Adress.s
Port.l
User.s
Password.s
EndStructure
Structure Email
MailFrom.s
MailTo.s
Subject.s
MsgBody.s
EndStructure
NewList LogBuffer.s()
Global Server.SmtpServer
Global Email.Email
Procedure SendMail(Logfile.s)
ClearList(LogBuffer())
AddElement(LogBuffer())
LogBuffer() = FormatDate("%mm.%dd.%yyyy %hh:%ii:%ss", Date())
If PureSMTP_OpenSMTPConnection(Server\Adress, Server\Port) = #PureSMTP_Ok
AddElement(LogBuffer())
LogBuffer() = PureSMTP_GetLastServerMessage()
If PureSMTP_SendMail(Email\MailTo, Email\MailFrom, Email\Subject, Email\MsgBody,"",Server\User,Server\Password) = #PureSMTP_Ok
AddElement(LogBuffer())
LogBuffer() = "Ok! - " + Email\MailTo
Else
AddElement(LogBuffer())
LogBuffer() = "Error: " + Email\MailTo
AddElement(LogBuffer())
LogBuffer() = PureSMTP_GetLastServerMessage()
EndIf
PureSMTP_CloseSMTPConnection()
Else
AddElement(LogBuffer())
LogBuffer() = "Error! Serververbinden"
AddElement(LogBuffer())
LogBuffer() = PureSMTP_GetLastServerMessage()
EndIf
File = OpenFile(#PB_Any,Logfile)
FileSeek(Lof())
If File
ForEach LogBuffer()
WriteStringN(LogBuffer())
Next
CloseFile(File)
EndIf
EndProcedure
Procedure Load_Einstellungen()
OpenPreferences("Config.ini")
Server\Adress = ReadPreferenceString("Server","")
Server\Port = ReadPreferenceLong("Port",25)
Server\User = ReadPreferenceString("User","")
Server\Password = ReadPreferenceString("PW","")
Email\MailFrom = ReadPreferenceString("MailFrom","")
Delay = ReadPreferenceLong("Delay",30)
ClosePreferences()
EndProcedure
Procedure Save_Einsetllungen()
Server\Adress = GetGadgetText(#String_Server)
Server\Port = Val(GetGadgetText(#String_Port))
Server\User = GetGadgetText(#String_User)
Server\Password = GetGadgetText(#String_PW)
Email\MailFrom = GetGadgetText(#String_MailFrom)
Delay = Val(GetGadgetText(#String_Delay))
CreatePreferences("config.ini")
WritePreferenceString("Server",Server\Adress)
WritePreferenceLong("Port",Server\Port)
WritePreferenceString("User",Server\User)
WritePreferenceString("PW",Server\Password)
WritePreferenceString("MailFrom",Email\MailFrom)
WritePreferenceLong("Delay",Delay)
ClosePreferences()
EndProcedure
Procedure Open_Window_Einstellungen()
HideWindow(#Window_0,1)
Load_Einstellungen()
If OpenWindow(#Window_Einstellungen, 243, 205, 258, 217, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Einstellungen")
If CreateGadgetList(WindowID())
TextGadget(#Text_0, 10, 10, 50, 20, "Server")
TextGadget(#Text_1, 10, 40, 50, 20, "Port")
TextGadget(#Text_3, 10, 70, 50, 20, "Username")
TextGadget(#Text_5, 10, 100, 50, 20, "Passwort")
TextGadget(#Text_7, 10, 130, 50, 20, "Email")
TextGadget(#Text_9, 10, 160, 70, 20, "Verzögerung")
StringGadget(#String_Server, 90, 10, 160, 20, Server\Adress)
StringGadget(#String_User, 90, 70, 160, 20, Server\User)
StringGadget(#String_PW, 90, 100, 160, 20, Server\Password, #PB_String_Password)
StringGadget(#String_MailFrom, 90, 130, 160, 20, Email\MailFrom)
StringGadget(#String_Delay, 90, 160, 20, 20, Str(Delay))
TextGadget(#Text_12, 120, 160, 70, 20, "in Sekunden")
StringGadget(#String_Port, 90, 40, 40, 20, Str(Server\Port))
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventCloseWindow
If EventWindowID() = #Window_Einstellungen
Save_Einsetllungen()
CloseWindow(#Window_Einstellungen)
HideWindow(#Window_0,0)
Break
EndIf
EndIf
ForEver
EndIf
EndIf
EndProcedure
NewList eMails.s()
Procedure Send(File.s)
Load_Einstellungen()
ClearList(eMails())
;Email Adressen öffnen
OpenFile(0,File)
While ~Eof(0)
AddElement(eMails())
eMails() = ReadString()
Wend
CloseFile(0)
HideWindow(#Window_0,1)
If OpenWindow(#Window_Wait,330,148,150,67,#PB_Window_ScreenCentered,"Emails werden verschickt")
If CreateGadgetList(WindowID())
TextGadget(#PrText,10,10,130,12,"x/x",#PB_Text_Center)
ProgressBarGadget(#Progressbar,10,27,130,30,0,CountList(eMails()),#PB_ProgressBar_Smooth)
SetGadgetState(#Progressbar,0)
EndIf
EndIf
ForEach eMails()
SetGadgetState(#Progressbar,ListIndex(eMails())+1)
SetGadgetText(#PrText,Str(ListIndex(eMails())+1) + "/" + Str(CountList(eMails())))
Email\MailTo = eMails()
SendMail("log.txt")
ForEach LogBuffer()
PrintN(LogBuffer())
Next
anfang = GetTickCount_()
Repeat
Delay(5)
WindowEvent()
Until (GetTickCount_() - anfang) > 1000 * Delay
Next
CloseWindow(#Window_Wait)
HideWindow(#Window_0,0)
MessageRequester("Fertig!","Alle Emails wurden versandt.")
EndProcedure
If OpenWindow(#Window_0, 330, 148, 239, 308, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "E-Mail Verteiler")
If CreateGadgetList(WindowID())
StringGadget(#String_EmailListe, 10, 30, 160, 20, "")
TextGadget(#Text_10, 10, 10, 60, 20, "Email Liste")
ButtonGadget(#Button_Suchen, 180, 30, 50, 20, "Suchen")
TextGadget(#Text_15, 10, 60, 60, 20, "Betreff")
StringGadget(#String_Betreff, 10, 80, 220, 20, "")
TextGadget(#Text_17, 10, 110, 60, 20, "Text")
EditorGadget(#Editor_Text, 10, 130, 220, 140)
ButtonGadget(#Button_Senden, 160, 280, 70, 20, "Senden")
ButtonGadget(#Button_Einstellungen,10,280,70,20,"Einstellungen")
EndIf
Else
End
EndIf
OpenConsole()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventCloseWindow
If EventWindowID() = #Window_0 : End : EndIf
EndIf
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
If GadgetID = #Button_Suchen
File.s = OpenFileRequester("E-Mail Verteilerliste","","",0)
SetGadgetText(#String_EmailListe,File)
ElseIf GadgetID = #Button_Senden
Send(File)
ElseIf GadgetID = #Button_Einstellungen
Open_Window_Einstellungen()
ElseIf GadgetID = #String_Betreff
Email\Subject = GetGadgetText(#String_Betreff)
ElseIf GadgetID = #Editor_Text
Email\MsgBody = GetGadgetText(#Editor_Text)
EndIf
EndIf
ForEver
CloseConsole()
End