Code C vers PB
Code C vers PB
J'ai trouvé sur le net un code en c pour envoyer un mail avec envoi de fichiers mais je n'arrive pas à le convertir pour l'utiliser avec PB.
Est-ce que quelqu'un s'y connait?
Est-ce que quelqu'un s'y connait?
Dernière modification par nico le mer. 03/août/2005 22:35, modifié 1 fois.
je sais que ça n'est pas ce que tu demande 
mais j'ai trouvé sur www.purearea.net
ce programme qui permet d'envoyer un email avec un attachement


mais j'ai trouvé sur www.purearea.net
ce programme qui permet d'envoyer un email avec un attachement

Code : Tout sélectionner
; www.purearea.net (Sourcecode collection by cnesm)
; Author: PB
; Date: 22. November 2003
;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
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() <> Lof()
CurrentByte.b = ReadByte()
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()
If AllocateMemory(0, InputBufferLength, 0)
OutputBufferLength.l = InputBufferLength + InputBufferLength/3 + 2
If OutputBufferLength < 64 : OutputBufferLength = 64 : EndIf
If AllocateMemory(1, OutputBufferLength, 0)
ReadData(UseMemory(0), InputBufferLength)
Base64Encoder(UseMemory(0), InputBufferLength, UseMemory(1), OutputBufferLength)
SendMailData(PeekS(UseMemory(1), 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(0) : FreeMemory(1)
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()
If AllocateMemory(0, InputBufferLength, 0)
ReadData(UseMemory(0), InputBufferLength)
SendMailData(PeekS(UseMemory(0), 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)
; ExecutableFormat=Windows
; EOF
Re: Code C vers PB
Convertion C vers PB non mais tu as pas mal d'aide sur l'envoi d'email sur http://www.iprelax.fr/nico a écrit :J'ai trouvé sur le net un code en c pour envoyer un mail avec envoie de fichiers mais je n'arrive pas à le convertir pour l'utiliser avec PB.
Est-ce que quelqu'un s'y connait?
Ca se choisit dans les options de ton projet de ton éditeur de code (VC++, DevC++ ...).nico a écrit :Merci mais ce qui m'intéresse, c'est de savoir transformer un code en c en lib statique pour PB.
Il faudra ensuite créér un fichier de description qui servira à exporter les fonctions à exporter (je pourrais éventuellement te le faire).
"Qui baise trop bouffe un poil." P. Desproges
Ah oui, je veux bien un coup de main.
Le fichier à télécharger:
http://www.imatix.com/pub/sfl/src/sflsrc21.zip
Les fichiers concernant l'envoi d'email sont:
sflmail.h et sflmail.c
J'ai compilé ce code avec Dev c++ en faisant une Lib, puis convertit ce fichier avec LibrairieMaker mais à l'utilisation PureBasic me signifie que certaines fonctions ne sont pas déclarées.
Je sais pas trop ce que je dois faire!

Le fichier à télécharger:
http://www.imatix.com/pub/sfl/src/sflsrc21.zip
Les fichiers concernant l'envoi d'email sont:
sflmail.h et sflmail.c
J'ai compilé ce code avec Dev c++ en faisant une Lib, puis convertit ce fichier avec LibrairieMaker mais à l'utilisation PureBasic me signifie que certaines fonctions ne sont pas déclarées.
Je sais pas trop ce que je dois faire!
Dernière modification par nico le jeu. 04/août/2005 19:09, modifié 1 fois.
450 fonctions ... ca en fait, je dirais pas que ce soit la meilleur bibliothèque que tu ais choisit (code tres vieux, coding style de l'époque ...) mais bon, je vais exporter que les fonctions nécéssaires pour l'envoye de fichier.
L'idéal serait de trouver une bibliothèque qui ne s'occupe que de l'envoye.
L'idéal serait de trouver une bibliothèque qui ne s'occupe que de l'envoye.
"Qui baise trop bouffe un poil." P. Desproges