Page 3 sur 3

Publié : lun. 19/avr./2004 12:52
par Chris
@ LuKky

Si toi, ou n'importe qui veut le source complet, je peux le mettre en ligne, ce n'est pas le problème. C'est ce que je vais faire, d'ailleurs. :)

Mon problème, pour le moment, est la connexion aux différents types de serveurs d'e-mail, le reste du code ne me pose pas de soucis pour le moment. :)

Voilà la partie qui envoie les pièces jointes.

Code : Tout sélectionner

Global res.s, cr.s, ConnID.l
Global Fichier.s

cr.s=Chr(13)+Chr(10)

Procedure send(msg.s)
  SendNetworkData(ConnID,@msg,Len(msg))
  Debug "Send: "+msg
EndProcedure

Procedure.s wait()
  res=""
  For tmp=1 To 4999
    res+" "
  Next
  ReceiveNetworkData(ConnID,@res,4999)
  Debug "received: "+res
  res=Left(res,3)
  ProcedureReturn res
EndProcedure

Procedure SendMail(Port.b, mailserver.s,mailto.s,mailfrom.s,subject.s,MsgBody.s)
  If InitNetwork()
    ConnID = OpenNetworkConnection(mailserver,Port)
    If ConnID
      wait()
      error=0
      If res="220"
        send("HELO "+mailfrom+cr)
        wait()
        If res="250"
          Delay(100)
          send("MAIL FROM: <"+mailfrom+">"+cr)
          wait()
          If res="250"
            send("RCPT TO: <"+mailto+">"+cr)
            wait()
            If res="250"
              send("DATA"+cr)
              wait()
              If res="354"
                Delay(100)
                ;- Partie 1 : En tête
                send("From: <"+mailfrom+">"+cr)
                send("To: <"+mailto+">"+cr)
                send("Subject: "+subject+cr)
                send("Date: "+D$+cr)
                send("MIME-Version: 1.0"+cr)
                send("Content-Type: multipart/mixed;"+cr)
                send("	boundary="+Chr(34)+"-=_NextPart"+cr+cr)
                
                ;- Partie 2 : Heuuu!!! Je sais pas
                send("X-Priority: 3"+cr)
                send("X-MSMail-Priority: Normal"+cr)
                send("X-Mailer: PBMailer"+cr)
                send("X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1409"+cr+cr)
                send("This is a multi-part message in MIME format."+cr+cr)
                
                ;- Partie 3 : Texte du message
                send("---=_NextPart"+cr)
                send("Content-Type: text/plain;"+cr)
                send("charset="+Chr(34)+"iso-8859-1"+Chr(34)+cr)
                send("Content-Transfer-Encoding: 7bit"+cr+cr)
                send(MsgBody +cr+cr); Message
                
                ;- Partie 4 : Piece jointe
                ;/ La partie qui est commentée, fait référence à la LinkedList() qui
                ;/ contient le chemin des fichiers à mettre en pièce jointe
                
                ;ResetList(Fichiers())
                ;While NextElement(Fichiers())
                ;If Fichiers()\Selected = 1
                ;Fichier$ = Fichiers()\Fichier
                
                send("---=_NextPart"+cr)
                send("Content-Type: application/octet-stream;"+cr)
                send("name="+Chr(34)+GetFilePart(Fichier$)+Chr(34)+cr)
                send("Content-Transfer-Encoding: 7bit"+cr)
                send("Content-Disposition: attachment; filename="+Chr(34)+GetFilePart(Fichier)+Chr(34)+cr);"+Cr)
                Delay(200)
                
                If ReadFile(0, Fichier)
                  Buffer.l = Lof()
                  *Mem0= AllocateMemory(Buffer)
                  If *Mem0
                    ReadData(*Mem0, Buffer)
                    send(PeekS(*Mem0, Buffer) + cr)
                  EndIf
                EndIf
                send(cr)
                send("---=_NextPart"+cr)
                send("--"+cr+"--"+cr+cr)
                Delay(150)
                
                ;EndIf
                ;Wend
                
                send(""+cr)
                send("."+cr)
                wait()
                If res="250"
                  Delay(100)
                  send("Quit"+cr)
                  wait()
                  ProcedureReturn 1
                EndIf
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
      CloseNetworkConnection(ConnID)
    EndIf
  EndIf
EndProcedure

Procedure.l popbeforesmtp(Port.b,Pop3_Server.s,mailuser.s,mailpass.s)
  If InitNetwork()
    ConnID = OpenNetworkConnection(Pop3_Server,Port)
    If ConnID
      wait()
      error=0
      If res="+OK"
        send("user "+mailuser+cr)
        wait()
        If res="+OK"
          Delay(100)
          send("pass "+mailpass+cr)
          wait()
          If res="+OK"
            Delay(100)
            send("QUIT"+cr)
            wait()
            ProcedureReturn 1
          EndIf
        EndIf
      EndIf
      CloseNetworkConnection(ConnID)
    EndIf
  EndIf
EndProcedure

;- Essai du code

;/ Destinataire
Dest.s="E-mail du destinataire"

;/ Expéditeur
Smtp.s="Smtp de l'expéditeur"
PortSmtp.b = 25
Pop3.s="Pop ou Pop3 de l'expéditeur"
PortPop.b = 110
Expe.s="E-Mail de l'expéditeur"
Pass.s="Mot de passe de l'expéditeur"

;/ Message
Sujet.s="Sujet du message"
Msge.s = "Mettre le message ici"
Fichier.s = "Chemin du fichier à joindre"

;/ Identification
Ident = 1 
; On met ident = 1, quand on est obligé de s'identifier sur POP3 pour poster
; C'est le cas chez certains fournisseurs d'accès comme OVH, par exemple

;/

If Ident = 1
  If popbeforesmtp(PortPop,Pop3,Expe,Pass)
    SendMail(PortSmtp, Smtp.s,Dest.s,Expe.s,Sujet.s,Msge.s)
  Else
    MessageRequester("","Erreur",#MB_ICONERROR)
  EndIf
Else
  SendMail(PortSmtp, Smtp.s,Dest.s,Expe.s,Sujet.s,Msge.s)
EndIf
;
En fait, elle était déjà sur le forum. En deux parties, mais elle y était.

Je mets tout le reste en ligne, et je poste un lien dès que c'est fait ;)

Chris :)

Le code source est ici.

Chris :)

Publié : lun. 19/avr./2004 15:22
par Oliv
merci pour le MIME :D

Publié : mar. 20/avr./2004 10:10
par Chris
J'ai fait pas mal d'essais, impossible de faire afficher les codes en format texte dans le webmail de la poste :mad: , alors que dans celui d'ovh, ça s'affiche sans aucun problème :).

J'ai même ouvert un compte à la poste pour éviter de saturer la boite "officielle" du site de codes. :lol:

Conclusion:
Ras-le-bol: Je laisse tomber! :evil:
Si j'ai des codes interessants, je les posterai avec Outlook Express!

Chris :)

Publié : mar. 20/avr./2004 10:27
par Lukky
@Chris

Sympa pour le source, mais je ne voulais pas te forcer la main, j'exposais juste mon point de vu.

Ton code est déjà très abouti, y'aura bien quelqu'un pour te filer un coup de main, à mon avis tu fais une overdose la :-)

Fais une pause, t'as pas le feu au cul.

JL

Publié : mar. 20/avr./2004 11:22
par Chris
Sympa pour le source, mais je ne voulais pas te forcer la main, j'exposais juste mon point de vu.
Non, tu ne m'a pas forcé la main, d'ailleurs, je suis d'accord avec toi, je me méfie des applications qui accèdent à Internet quand je ne sais pas de qui elles proviennent. Je les installe parce que je n'ai pas de données confidentielles sur ce PC!
En plus, bien que n'étant pas breton, je suis plutôt têtu et si j'avais décidé de ne pas donner le source, il aurait fallu s'accrocher pour me faire changer d'avis :lol:

...y'aura bien quelqu'un pour te filer un coup de main...
Le seul moyen de me donner un coup de main, c'est de me dire comment le cgi du webmail de la poste s'y prends pour décoder les e-mails.

A part pirater leur site, je ne vois pas bien comment faire :lol:
(A ne pas faire, évidemment :wink: )

En plus, ça fait 3 jours que je cherche des documentations sur le type MIME sur Internet, impossible de trouver quoi que ce soit de vraiment exploitable!. J'ai bien trouvé des trucs, la plupart du temps en anglais, mais j'ai pas vraiment envie de déchiffrer 30 pages de texte, remplies de termes techniques. Je ne connait pas assez l'anglais pour ça.


Chris :)