Mail-Lib - E-Mail versenden
Re: Mail-Lib - E-Mail versenden
@ts-soft
Sorry das verstehe ich nur begrenzt, was ist für mich zu tun, was muss ich wo setzen?
Sorry das verstehe ich nur begrenzt, was ist für mich zu tun, was muss ich wo setzen?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mail-Lib - E-Mail versenden
In den CompilerOptionen ein SubSystem eintragen, wenn Du Unicode oder Threadsafe benutzt.
Wie genau das Subsystem heißt findest Du in der Hilfe zur Lib, ich kann es Dir nicht genau sagen,
ich verwende keine UserLibs, die dies erforderlich machen.
UserLibUnicode oder ähnlich heißt das SubSystem.
Wie genau das Subsystem heißt findest Du in der Hilfe zur Lib, ich kann es Dir nicht genau sagen,
ich verwende keine UserLibs, die dies erforderlich machen.
UserLibUnicode oder ähnlich heißt das SubSystem.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Mail-Lib - E-Mail versenden
@ts-soft
Welchen Weg würdest du gehen, über die API von Windows?
Welchen Weg würdest du gehen, über die API von Windows?
Re: Mail-Lib - E-Mail versenden
Ich habe den Thread abgeschaltet, weil nach Einbindung der "UserLibThreadSafe" noch mehr Fehler aufgetreten sind und ich die Funktion nicht brauche
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mail-Lib - E-Mail versenden
Den müsste ich mir erst suchen. Aber diese UserLib ist mir mit zu vielen Einschränkungen verbunden.kunstlust hat geschrieben:@ts-soft
Welchen Weg würdest du gehen, über die API von Windows?
- Nicht Plattformunabhängig (nicht so wichtig)
- Keine 64-Bit Unterstützung (kann man notfalls tolerieren)
- Kein Sourcecode (man ist vom Support des Herstellers abhängig, da nutzt es auch nicht viel, das der Support von Gnozal ist hervorragend ist)
Unter diesen Voraussetzungen würde ich mir 3x mal überlegen überhaupt ein Projekt zu beginnen, außer vielleicht einer kleinen Spielerei.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Mail-Lib - E-Mail versenden
@TS-Soft
Es ist schon schade, das diese "Grundfunktion" in PB nicht drin ist, welcher Mailserver nimmt noch Mails ohne "SMTP-Auth" an. Das selbe Problem habe ich unter AutoIT auch gehabt, dort ist jedoch die API leichter zu nutzen, sodass ich mir das von einem VBS Sample abgeschaut habe:
Es ist schon schade, das diese "Grundfunktion" in PB nicht drin ist, welcher Mailserver nimmt noch Mails ohne "SMTP-Auth" an. Das selbe Problem habe ich unter AutoIT auch gehabt, dort ist jedoch die API leichter zu nutzen, sodass ich mir das von einem VBS Sample abgeschaut habe:
Code: Alles auswählen
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Example CDO Message"
objMessage.From = "me@my.com"
objMessage.To = "test@paulsadowski.com"
objMessage.HTMLBody = "<h1>This is some sample message html.</h1>"
'objMessage.CreateMHTMLBody "Body"
'objMessage.CreateMHTMLBody "file://c|/temp/test.htm"
objMessage.Bcc = "you@your.com"
objMessage.Cc = "you2@your.com"
objMessage.Send
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: Mail-Lib - E-Mail versenden
Schade, das Droopy seine Mailfunktion aus seiner Lib herausgenommen hat.
Da ich noch ein altes Beispiel einer älteren Droopy-Lib habe, habe ich diesen Teil
extrahiert und soweit es bei mir funktioniert anpassen können. Vielleicht hilft es hier
jemanden weiter
Falls noch was geändert werden muss, wäre es ok, wenn ihr das hier posten würdet.
Bei mir hat es, so wie ich es angepasst habe, jedenfalls funktioniert.
Gruß,
Falko
Da ich noch ein altes Beispiel einer älteren Droopy-Lib habe, habe ich diesen Teil
extrahiert und soweit es bei mir funktioniert anpassen können. Vielleicht hilft es hier
jemanden weiter

Code: Alles auswählen
;- _____________________________________________________________________________
;- | |
;- | SendEmail (New) |
;- | _______________ |
;- | |
;- |___________________________________________________________________________|
;{ SendEmail (New) (Start)
; Author : clipper
; PureBasic 3.93
; Changed to Purebasic 4.61 x86 from Falko
; Sending Mail with SMTP-AUTH + add multiple attachments
; Don´t fill the Username if you don't want authentification
Enumeration
#eHlo
#RequestAuthentication
#Username
#Password
#MailFrom
#RcptTo
#Data
#Quit
#Complete
EndEnumeration
ProcedureDLL SendEMailInit()
Global NewList Attachments.s()
Global SendEMailConnectionID.l
EndProcedure
ProcedureDLL AddAttachment(File.s)
AddElement(Attachments())
Attachments() = file
EndProcedure
ProcedureDLL NoAttachment()
ClearList(Attachments())
EndProcedure
Procedure.s GetMIMEType(Extension.s)
Extension = "." + Extension
hKey.l = 0
KeyValue.s = Space(255)
DataSize.l = 255
If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, Extension, 0, #KEY_READ, @hKey)
KeyValue = "application/octet-stream"
Else
If RegQueryValueEx_(hKey, "Content Type", 0, 0, @KeyValue, @DataSize)
KeyValue = "application/octet-stream"
Else
KeyValue = Left(KeyValue, DataSize-1)
EndIf
RegCloseKey_(hKey)
EndIf
ProcedureReturn KeyValue
EndProcedure
Procedure.s Base64Encode(strText.s)
;DefType.s Result
*B64EncodeBufferA = AllocateMemory(Len(strText)+1)
*B64EncodeBufferB = AllocateMemory((Len(strText)*3)+1)
PokeS(*B64EncodeBufferA, strText)
Base64Encoder(*B64EncodeBufferA, Len(strText), *B64EncodeBufferB, Len(strText)*3)
Result.s = PeekS(*B64EncodeBufferB)
FreeMemory(*B64EncodeBufferA)
FreeMemory(*B64EncodeBufferB)
ProcedureReturn Result
EndProcedure
Procedure Send(msg.s)
msg+#CRLF$
SendNetworkData(SendEMailConnectionID, @msg, Len(msg))
EndProcedure
Procedure SendFiles()
ResetList(Attachments())
While(NextElement(Attachments()))
file.s=Attachments()
Send("")
If ReadFile(0,file.s)
InputBufferLength.l = Lof(0)
OutputBufferLength.l = InputBufferLength * 1.4
*memin=AllocateMemory(InputBufferLength)
If *memin
*memout=AllocateMemory(OutputBufferLength)
If *memout
Boundry.s = "--MyBoundary"
Send(Boundry)
Send("Content-Type: "+GetMIMEType(GetExtensionPart(file.s)) + "; name=" + Chr(34) + GetFilePart(file.s) + Chr(34))
Send("Content-Transfer-Encoding: base64")
Send("Content-Disposition: Attachment; filename=" + Chr(34) + GetFilePart(file) + Chr(34))
Send("")
ReadData(0,*memin,InputBufferLength)
Base64Encoder(*memin,60,*memout,OutputBufferLength)
Send(PeekS(*memout,60)) ; this must be done because For i=0 To OutputBufferLength/60 doesn´t work
Base64Encoder(*memin,InputBufferLength,*memout,OutputBufferLength)
For i=1 To OutputBufferLength/60
temp.s=Trim(PeekS(*memout+i*60,60))
If Len(temp)>0
Send(temp)
EndIf
Next
EndIf
EndIf
FreeMemory(-1)
CloseFile(0)
EndIf
Wend
ProcedureReturn
EndProcedure
ProcedureDLL SendEmail(Name.s,sender.s,recipient.s,Username.s,Password.s,smtpserver.s,subject.s,body.s)
If InitNetwork()
SendEMailConnectionID = OpenNetworkConnection(smtpserver, 25)
If SendEMailConnectionID
loop250.l=0
Repeat
If NetworkClientEvent(SendEMailConnectionID)
ReceivedData.s=Space(9999)
ct=ReceiveNetworkData(SendEMailConnectionID ,@ReceivedData,9999)
If ct
cmdID.s=Left(ReceivedData,3)
cmdText.s=Mid(ReceivedData,5,ct-6)
Select cmdID
Case "220"
If Len(Username)>0
Send("Ehlo " + Hostname())
State=#eHlo
Else
Send("HELO " + Hostname())
State=#MailFrom
EndIf
Case "221"
Send("[connection closed]")
State=#Complete
quit=1
Case "235"
Send("MAIL FROM: <" + sender + ">")
State=#RcptTo
Case "334"
If State=#RequestAuthentication
Send(Base64Encode(Username))
State=#Username
EndIf
If State=#Username
Send(Base64Encode(password))
state=#Password
EndIf
Case "250"
Select state
Case #eHlo
Send("AUTH LOGIN")
state=#RequestAuthentication
Case #MailFrom
Send("MAIL FROM: <" + sender + ">")
state=#RcptTo
Case #RcptTo
Send("RCPT TO: <" + recipient + ">")
state=#Data
Case #Data
Send("DATA")
state=#Quit
Case #Quit
Send("QUIT")
EndSelect
Case "251"
Send("DATA")
state=#Data
Case "354"
Send("X-Mailer: eSMTP 1.0")
Send("To: " + recipient)
Send("From: " + name + " <" + sender + ">")
Send("Reply-To: "+sender)
Send("Date:" + FormatDate("%dd/%mm/%yyyy @ %hh:%ii:%ss", Date()) )
Send("Subject: " + subject)
Send("MIME-Version: 1.0")
Send("Content-Type: multipart/mixed; boundary="+Chr(34)+"MyBoundary"+Chr(34))
Send("")
Send("--MyBoundary")
Send("Content-Type: text/plain; charset=us-ascii")
Send("Content-Transfer-Encoding: 7bit")
Send("")
Send(body.s)
SendFiles()
Send("--MyBoundary--")
Send(".")
Case "550"
quit=1
EndSelect
EndIf
EndIf
Until quit = 1
CloseNetworkConnection(SendEMailConnectionID)
EndIf
EndIf
EndProcedure
Name.s="Mein Name bei email.de" ; Hier ist egal was steht.
sender.s="Mein@Mail.de" ;E-Mail des Senders
recipient.s="Empfaenger@SeineMail.de";E-Mail des Empfängers
Username.s="Benutzername" ; Username
Password.s="XXXXXXX" ; hier dein Kennwort
smtpserver.s="mail.SMTP.DE" ; Hier bei Evanzo mail. + E-Mailaccount
subject.s="Diese Mail wurde von mir geschickt" ; Hier Betreffzeile
body.s="Das ist eine Mail, die ich mal testweise an mich selber ueber PB schicke" ; Hier der Text im Body
SendEMailInit()
SendEmail(Name,sender,recipient,Username,Password,smtpserver,subject,body)
Bei mir hat es, so wie ich es angepasst habe, jedenfalls funktioniert.
Gruß,
Falko
Re: Mail-Lib - E-Mail versenden
Hier die COMate-Variante (ungetestet):
Code: Alles auswählen
IncludePath "[DeinPfadZu]\COMatePLUS\" ; Pfad anpassen!
XIncludeFile "comateplus.pbi"
Define objMessage.COMateObject
objMessage = COMate_CreateObject("CDO.Message")
If objMessage
objMessage\SetStringProperty("Subject='Example CDO Message'")
objMessage\SetStringProperty("From='me@my.com'")
objMessage\SetStringProperty("To='test@paulsadowski.com'")
objMessage\SetStringProperty("HTMLBody='<h1>This is some sample message html.</h1>'")
objMessage\SetStringProperty("Bcc='you@your.com'")
objMessage\SetStringProperty("Cc='you2@your.com'")
objMessage\Invoke("Send")
objMessage\Release()
Else
Debug "!objMessage"
EndIf
a²+b²=mc²
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mail-Lib - E-Mail versenden
@Falko
Der Code funktioniert, mal sehen vielleicht überarbeite ich den mal, enthält ja viel unnötiges und Unicode wird der auch nicht mögen.
Der Code stammt IMHO aus diesem Board, aber das alte Archiv wurde ja gelöscht.
Der Code funktioniert, mal sehen vielleicht überarbeite ich den mal, enthält ja viel unnötiges und Unicode wird der auch nicht mögen.
Der Code stammt IMHO aus diesem Board, aber das alte Archiv wurde ja gelöscht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: Mail-Lib - E-Mail versenden
Danke Thomas,ts-soft hat geschrieben:@Falko
Der Code funktioniert, mal sehen vielleicht überarbeite ich den mal, enthält ja viel unnötiges und Unicode wird der auch nicht mögen.
Der Code stammt IMHO aus diesem Board, aber das alte Archiv wurde ja gelöscht.
das freut mich sehr.

Gruß,
Falko