Page 12 of 25

Posted: Wed Apr 25, 2007 1:21 pm
by gnozal
Update PB4 version only

Changes :
- added user callback

The callback is like this :

Code: Select all

Procedure MyCallback(AttachmentNumber.l, Progression.f)
  ; AttachmentNumber : attachment number [1 - X]
  ; Progression : attachment sending progression [0 - 100 %]
  Debug "Attachement n°"  + Str(AttachmentNumber) + " : " + StrF(Progression) + "%"
EndProcedure
And defined like this :

Code: Select all

PureSMTP_SetAttachmentCallback(@MyCallback())

Posted: Wed Apr 25, 2007 2:30 pm
by Flype
thanks a lot gnozal.

it works like a charm :P



and congrat' for the very quick answer/update.

Posted: Sat Jun 09, 2007 11:02 am
by Kukulkan
Hi gnozal,

Your library's are really great! Thank you!

Now a little feature-request:
Is it possible to enhance the PureSMTP library with SSL compatibility? Currently, my users can't use it on GMail accounts and other SSL depending accounts. This would be very nice!

Kukulkan

Posted: Sat Jun 09, 2007 11:10 am
by gnozal
Kukulkan wrote:Now a little feature-request:
Is it possible to enhance the PureSMTP library with SSL compatibility? Currently, my users can't use it on GMail accounts and other SSL depending accounts. This would be very nice!
Kukulkan
Sorry ...
I am no network guru and I really don't have the time to study SSL/TLS (much real world work), so my answer is still the same :
Kukulkan wrote:Hi gnozal,
I currently use your library on a PB3.94 project. It works fine, but some people ask for using SSL/TLS for sending e-mails (especially those who are using gmail.com). Is it possible to send and receive e-mails using SSL/TLS? Actualy, only sending is important for me.
I don't know which API's you are using, but maybe it is possible to use InternetOpenUrl_() with the #INTERNET_FLAG_SECURE flag to connect to the server?
I don't use WinAPI, only the purebasic network library functions.
And I don't know the SSL/TLS protocol (I don't know if it's even possible without API).

Posted: Sat Jun 09, 2007 11:23 am
by Kukulkan
Oh, I didn't remember that I asked that feature before. Sorry.

Kukulkan

Posted: Mon Jun 11, 2007 7:52 am
by gnozal
Kukulkan wrote:Oh, I didn't remember that I asked that feature before. Sorry.

Kukulkan
No problem.
Many apps use a third party DLL from www.OpenSSL.org, so it doesn't look that easy ...

Posted: Tue Sep 04, 2007 4:48 pm
by Kukulkan
Hi gnozal,

Any news about the SSL/TLS implementation?

(just a joke :wink: )

I need to convert a little tool to linux. Currently I collect information about the technology and tools available. As PureBasic seem to be usable on Linux, it looks good to transfer the code to linux PB. But the tool uses PureSMTP to be able to send e-mails including status reports (attachments). Is there a Linux-port of PureSMTP available? If not, is there PB source that may compile using Linux?

Kukulkan

Posted: Wed Sep 05, 2007 12:15 pm
by gnozal
Kukulkan wrote:I need to convert a little tool to linux. Currently I collect information about the technology and tools available. As PureBasic seem to be usable on Linux, it looks good to transfer the code to linux PB. But the tool uses PureSMTP to be able to send e-mails including status reports (attachments). Is there a Linux-port of PureSMTP available? If not, is there PB source that may compile using Linux?
No Linux version planned for my tools : I use windows API, and I don't know linux.
There are some code examples almost without API in the codearchiv, including mail with attachments.
Example :

Code: Select all

; www.purearea.net (Sourcecode collection by cnesm)
; Author: PB (updated for PB 4.00 by Andre)
; Date: 22. November 2003
; OS: Windows
; Demo: No

;Modified code originally posted by Paul IIRC  :) 

;USAGE: 
;PBSendMail( 
;                        RecipientEmailAddress as String 
;                        SenderEmailAddress as String 
;                        MailServerHost as String 
;                        Subject as String 
;                        Message as String 
;                        AttachmentIncluded as Byte (Flag: 0/1) 
;                     ) 

;NOTES: 
;When the 'AttachmentIncluded' flag is set to '1', the mail procedure loops through a linked list 
;called 'Attachments()' then encodes or processes the attachments. So to send attachments 
;you must have a linked list called 'Attachments()'. 

;=============================================== 
;-GLOBAL FLAGS / VARIABLES / STRUCTURES / ARRAYS 
;=============================================== 

Global ConnectionID.l 
Global MailResponse.s 

;Example linked list 
Global NewList Attachments.s() 
InsertElement(Attachments()) 
Attachments() = "C:\Documents And Settings\User\Desktop\Image.jpg" 
;InsertElement(Attachments()) 
;Attachments() = "C:\Documents And Settings\User\Desktop\Archive.zip" 
;InsertElement(Attachments()) 
;Attachments() = "C:\Documents And Settings\User\Desktop\ObscureText.fff" 

;=============================================== 
;-PROCEDURES 
;=============================================== 

;Check to see if the file is binary 
Procedure IsBinary(File.s) 
    If ReadFile(0, File) 
        While Loc(0) <> Lof(0) 
            CurrentByte.b = ReadByte(0) 
            If CurrentByte <= 9 Or CurrentByte = 127 
                CloseFile(0) 
                ProcedureReturn 1 
            EndIf 
            If CurrentByte > 10 And CurrentByte < 13 
                CloseFile(0) 
                ProcedureReturn 1 
            EndIf 
            If CurrentByte > 13 And CurrentByte < 32 
                CloseFile(0) 
                ProcedureReturn 1 
            EndIf 
        Wend 
    EndIf 
EndProcedure 

;Find the MIME type for a given file extension 
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 

;Send a piece of mail data 
Procedure SendMailData(msg.s) 
    SendNetworkData(ConnectionID, @msg, Len(msg)) 
EndProcedure 

;Check the server responses 
Procedure.s MailResponse() 
    MailResponse=Space(9999) 
    ReceiveNetworkData(ConnectionID,@MailResponse,9999) 
    MailResponse=Left(MailResponse,3) 
    ProcedureReturn MailResponse 
EndProcedure 

;Send the mail 
Procedure PBSendMail(RecipientEmailAddress.s, SenderEmailAddress.s, MailServerHost.s, Subject.s, Message.s, AttachmentIncluded.b) 
    If InitNetwork() 
        ConnectionID = OpenNetworkConnection(MailServerHost, 25) 
        If ConnectionID <> 0 
            MailResponse() 
            If MailResponse = "220" 
                Index = FindString(MailServerHost, ".", 1) 
                MailServerDomain.s = Mid(MailServerHost, Index + 1, Len(MailServerHost)) 
                SendMailData("HELO "+MailServerDomain+Chr(13)+Chr(10)) 
                MailResponse() 
                If MailResponse="250" 
                    Sleep_(125) 
                    SendMailData("MAIL FROM: <"+SenderEmailAddress+">"+Chr(13)+Chr(10)) 
                    MailResponse() 
                    If MailResponse="250" 
                        SendMailData("RCPT TO: <"+RecipientEmailAddress+">"+Chr(13)+Chr(10)) 
                        MailResponse() 
                        If MailResponse="250" 
                            SendMailData("DATA"+Chr(13)+Chr(10)) 
                            MailResponse() 
                            If MailResponse="354" 
                                Sleep_(125) 
                                SendMailData("X-Mailer: PBSendMail v1.0" + Chr(13) + Chr(10)) 
                                SendMailData("To: " + RecipientEmailAddress + Chr(13) + Chr(10)) 
                                SendMailData("From: " + SenderEmailAddress + Chr(13) + Chr(10)) 
                                SendMailData("Reply-To:" + SenderEmailAddress + Chr(13) + Chr(10)) 
                                SendMailData("Date: " + FormatDate("%dd/%mm/%yyyy @ %hh:%ii:%ss", Date()) + Chr(13) + Chr(10)) 
                                SendMailData("Subject: " + Subject + Chr(13) + Chr(10)) 
                                SendMailData("MIME-Version: 1.0" + Chr(13) + Chr(10)) 
                                ;Handle any attachments 
                                If AttachmentIncluded 
                                    Debug "Processing 'multipart/mixed' Email..." 
                                    Boundry.s = "PBSendMailv1.0_Boundry_"+ FormatDate("%dd%mm%yyyy%hh%ii%ss", Date()) 
                                    SendMailData("Content-Type: multipart/mixed; boundary=" + Chr(34) + Boundry + Chr(13) + Chr(10) + Chr(34)) 
                                    SendMailData(Chr(13) + Chr(10)) 
                                    ;Main message 
                                    Debug "Processing Messsage..." 
                                    SendMailData("--" + Boundry + Chr(13) + Chr(10)) ; Boundry 
                                    SendMailData("Content-Type: text/plain; charset=" + Chr(34) + "iso-8859-1" + Chr(34) + Chr(13) + Chr(10)) 
                                    SendMailData("Content-Transfer-Encoding: 7bit" + Chr(13) + Chr(10)) 
                                    SendMailData(Chr(13) + Chr(10)) 
                                    Sleep_(125) 
                                    SendMailData(Message + Chr(13) + Chr(10)) 
                                    SendMailData(Chr(13) + Chr(10)) 
                                    Sleep_(125) 
                                    Debug "Processing Attachments..." 
                                    ResetList(Attachments()) 
                                    While(NextElement(Attachments())) 
                                        ;Attachment headers 
                                        SendMailData("--" + Boundry + Chr(13) + Chr(10)) ; Boundry 
                                        SendMailData("Content-Type: " + GetMIMEType(GetExtensionPart(Attachments())) + "; name=" + Chr(34) + GetFilePart(Attachments()) + Chr(34) + Chr(13) + Chr(10)) 
                                        If IsBinary(Attachments()) 
                                            SendMailData("Content-Transfer-Encoding: base64" + Chr(13) + Chr(10)) 
                                            SendMailData("Content-Disposition: Attachment; filename=" + Chr(34) + GetFilePart(Attachments()) + Chr(34) + Chr(13) + Chr(10)) 
                                            SendMailData(Chr(13) + Chr(10)) 
                                            Sleep_(125) 
                                            ;Encode the Attachments using Base64 
                                            If ReadFile(0, Attachments()) 
                                                InputBufferLength.l = Lof(0) 
                                                *memin = AllocateMemory(InputBufferLength) 
                                                If *mem
                                                    OutputBufferLength.l = InputBufferLength + InputBufferLength/3 + 2 
                                                    If OutputBufferLength < 64 : OutputBufferLength = 64 : EndIf 
                                                    *memout = AllocateMemory(OutputBufferLength) 
                                                    If *memout
                                                        ReadData(0, *memin, InputBufferLength) 
                                                        Base64Encoder(@memin, InputBufferLength, @memout, OutputBufferLength) 
                                                        SendMailData(PeekS(*memout, OutputBufferLength) + Chr(13) + Chr(10)) 
                                                        Debug GetFilePart(Attachments()) + " (base64) Encoded" 
                                                    Else 
                                                        Debug "ERROR: Unable to allocate memory for Bank 1 to process " + GetFilePart(Attachments()) 
                                                        ProcedureReturn 0 
                                                    EndIf 
                                                Else 
                                                    Debug "ERROR: Unable to allocate memory for Bank 0 to process " + GetFilePart(Attachments()) 
                                                    ProcedureReturn 0 
                                                EndIf 
                                            Else 
                                                Debug "ERROR: Unable to read file: " + GetFilePart(Attachments()) 
                                                ProcedureReturn 0 
                                            EndIf 
                                            CloseFile(0) : FreeMemory(*memin) : FreeMemory(*memout) 
                                        Else 
                                            SendMailData("Content-Transfer-Encoding: 7bit" + Chr(13) + Chr(10)) 
                                            SendMailData("Content-Disposition: Attachment; filename=" + Chr(34) + GetFilePart(Attachments()) + Chr(34) + Chr(13) + Chr(10)) 
                                            SendMailData(Chr(13) + Chr(10)) 
                                            Sleep_(125) 
                                            If ReadFile(0, Attachments()) 
                                                InputBufferLength.l = Lof(0) 
                                                *memin = AllocateMemory(InputBufferLength)
                                                If *memin
                                                    ReadData(0, *memin, InputBufferLength) 
                                                    SendMailData(PeekS(*memin, InputBufferLength) + Chr(13) + Chr(10)) 
                                                    Debug GetFilePart(Attachments()) + " (7bit) Processed" 
                                                Else 
                                                    Debug "ERROR: Unable to allocate memory for Bank 0 to process " + GetFilePart(Attachments()) 
                                                    ProcedureReturn 0 
                                                EndIf 
                                            Else 
                                                Debug "ERROR: Unable to read file: " + GetFilePart(Attachments()) 
                                                ProcedureReturn 0 
                                            EndIf 
                                        EndIf 

                                        Sleep_(125) 
                                        SendMailData(Chr(13) + Chr(10)) 
                                    Wend 
                                    SendMailData("--" + Boundry + "--" + Chr(13) + Chr(10)) ; End Boundry 
                                Else 
                                    Debug "Processing messsage..." 
                                    SendMailData("Content-Type: text/plain; charset=" + Chr(34) + "iso-8859-1" + Chr(34) + Chr(13) + Chr(10)) 
                                    SendMailData("Content-Transfer-Encoding: 7bit" + Chr(13) + Chr(10)) 
                                    SendMailData(Chr(13) + Chr(10)) 
                                    Sleep_(125) 
                                    SendMailData(Message + Chr(13) + Chr(10)) 
                                EndIf 
                                Sleep_(125) 
                                SendMailData(Chr(13)+Chr(10)) 
                                SendMailData("."+Chr(13)+Chr(10)) 
                                MailResponse() 
                                If MailResponse="250" 
                                    Sleep_(125) 
                                    SendMailData("QUIT"+Chr(13)+Chr(10)) 
                                    MailResponse() 
                                    Debug "Mail sent successfully." 
                                    ProcedureReturn 1 
                                EndIf 
                            EndIf 
                        EndIf 
                    EndIf 
                EndIf 
            EndIf 
            CloseNetworkConnection(ConnectionID) 
        EndIf 
    EndIf 
EndProcedure 

;Testing: 
PBSendMail("theirmail@server.com", "yourmail@server.com", "smtp.server.com", "Subject Line", "Lorem Ipsum Dolar Sit Amet...", 0) 

Posted: Wed Sep 05, 2007 2:15 pm
by Kukulkan
Hi Gnozal,

Thank your for your reply and the example-code. But currently there is only one example of SMTP using authentication available in PureArea. But this source is using windows API for registry-access. It seems like I have to implement this by myself for a linux version of my program. Let's see...

Kukulkan

Posted: Sun Sep 09, 2007 7:12 pm
by RichardL
Hi Gnozal,

Pure_SMPT looks like it will solve a problem for me, but I'm having a problem with my SMPT Server that did not appear when I ran you demo code. I could get your demo to work, or my own network functions... but not both...then I found SkipInitNetwork() and all appeared to make sense. However I cannot understand the value of SkipInit.l in the docs...

>> PureSMTP_SkipInitNetwork(SkipInit.l)

Could you kindly explain it for me?
Should it be #True or #False or a value from elsewhere?

Thanks in advance.

Richard L

Posted: Mon Sep 10, 2007 7:55 am
by gnozal
RichardL wrote:PureSMTP_SkipInitNetwork(SkipInit.l)

Could you kindly explain it for me?
Should it be #True or #False or a value from elsewhere?
PureSMTP_SkipInitNetwork(#FALSE) [Default] : PureSMTP calls InitNetwork() at library initialization
PureSMTP_SkipInitNetwork(#TRUE) : PureSMTP does not call InitNetwork() at library initialization ; you have to do it before calling any PureSMTP function.

Posted: Mon Sep 10, 2007 7:57 am
by RichardL
Many thanks...

Posted: Wed Oct 10, 2007 12:46 pm
by Psychophanta
Many thanks also from me, Gnozal! :!:
I have a question to this lib; can be sent 2000 email messages to different email addresses from a hotmail account or from any other? :?:
Thanks again !

EDIT: BTW, it is not to spread spam, but to spread email messages to a society for the mobility optimization in the cities (i.e. more use of bicycles, etc.).

Posted: Wed Oct 10, 2007 12:51 pm
by gnozal
Psychophanta wrote:Many thanks also from me, Gnozal! :!:
I have a question to this lib; can be sent 2000 email messages to different email addresses from a hotmail account or from any other? :?:
Thanks again !
I don't know about hotmail.
All I can say is that it works with freenet.de for example. Note that this lib does not support SSL. So gmail.com for example won't work.

Posted: Wed Oct 10, 2007 2:22 pm
by Psychophanta
gnozal wrote:
Psychophanta wrote:Many thanks also from me, Gnozal! :!:
I have a question to this lib; can be sent 2000 email messages to different email addresses from a hotmail account or from any other? :?:
Thanks again !
I don't know about hotmail.
All I can say is that it works with freenet.de for example. Note that this lib does not support SSL. So gmail.com for example won't work.
Thanks!