Mail example file...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Mail example file...

Message par selzig »

Bonjour,

J'ai découvert par hasard Purebasic et en cette période de vacances, j'ai téléchargé la version de Démo. Je voudrais m'en faire une idée ayant lu des arguments très contradictoires sur celui-ci.
Comme je termine actuellement un petit "maileur" (dans un autre langage compilé multiOS) dont la fonction principale est d'envoyer des mails en HTML accompagnés de quelques pièces jointes, j'ai un bon point de repère. Pour les pièces jointes pas de problème. Mais comment fait-on pour que le fichier HTML s'ouvre directement dans le client de messagerie ? Le seul moment où l'on peut déclarer le Type MIME semble être dans la fonction AddMailAttachment.

Cordialement. Gilles
Dernière modification par selzig le sam. 11/juil./2009 11:34, modifié 1 fois.
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Je me réponds...

A priori, c'est possible en utilisant la fonction SendMailData... qui n'est pas disponible (ni visible) dans la version de démo. Dommage. Ceci terminera donc ma découverte de ce produit d'autant que l'utilisation des bases mysql me semble également compliquée lorsqu'on ne veut pas utiliser ODBC... (et c'est mon cas).

Sinon, le peu de temps (2 x 1/2 journées) que j'ai utilisé le produit m'a semblé agréable et surprenant : sans Objet, on arrive à développer facilement. Mais, les forums ne permettent pas de se faire une idée, pas plus donc que la version de démo qui est trop bridée.

Autre chose que je n'ai pas pu discerner : Qui développe PureBasic ? "Fred et son équipe", c'est quoi ? Une société déclarée comme telle ? Une association non formalisée ? Le coût financier d'un produit de développement n'est à mon avis pas significatif... Par contre, la structure qui le développe l'est beaucoup à mes yeux, autant que l'investissement des programmeurs qui utilisent ce dernier.

Cordialement. Gilles
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Bonjour,

Merci pour l'info.

Il est écrit qu'ils assurent le support. Faut-il en "déduire" que c'est aussi l'équipe de développement ? (sinon, je suppose que vous m'auriez proposer un autre lien)

Si tel est le cas, un langage de programmation dont le code est "fermé" et dont le developpement est assuré par seulement 2 programmeurs, c'est bluffant !... Mais, justement de par ces choix (et sans aucunement remettre en cause les qualités du produit), en environnement professionnel de production, j'hésiterais à prendre le risque de l'utiliser (ou de le faire utiliser) sauf pour la réalisation de quelques maquettes ou modélisations... d'autant qu'il s'écarte délibérément des désormais usuelles habitudes "Objet".

Cordialement. Gilles
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Bienvenue Selzig,

Là tu te goures! Sur le plan de la performance et de la simplicité de programmation, ce langage est violent. Ce qu'il est plus dur à faire comprendre, c'est passer le message à d'autres professionnels.

Aussi, tu peux développer un projet et être aidé par différentes personnes ici présentes. Par contre, c'est vrai que les liens que jBernard13 met ne sont pas à user pour une demande d'explication précise et succinte: c'est pour cela qu'il y a ce forum.

N'hésite pas à présenter ce que tu connais déjà en informatique et, éventuellement dans ce langage. ça permet de situer ceux qui peuvent t'aider.

Ollivier
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Bonjour Ollivier,

Je partage probablement votre opinion. Le premier mot que j'utiliserais pour caractériser PB est bluffant. Développer sans Objet pour Windows ou Linux (en environnement graphique), c'est surprenant, original... et intéressant.

Maintenant pour développer en SSII, une application de gestion "classique" en se passant d'un outil comme un générateur d'états ou pour développer un back-end de site internet sans accès natifs mysql ou postgresql (et sans ODBC que tous nos tests dans différents langages ont "proscrits"), il faut voir... Et là, je me suis heurté à la limite de la version de démo.

Donc, pour en savoir plus, j'ai consulté les forums et essayé de joindre les concepteurs. Dans les forums, j'ai vu de nombreuses discussions sur le positionnement professionnel du produit enfin plus exactement sur la place que pourrait prendre ce produit en environnement professionnel. D'où mes questions.

Le problème n'est pas dans les 79€... mais le temps pour obtenir une qualification suffisante et développer proprement dans un langage représente un investissement lourd pour une SSII (et ses programmeurs). La pérennité du produit d'une part, et ses fonctionnalités et surtout ses incapacités d'autre part, sont des facteurs prépondérants dans les choix. Comme je l'ai lu, je ne suis pas surpris que cela passe bien dans le milieu enseignant... Le produit est original, intellectuellement intéressant... Qu'il y ait des réticenses dans le milieu de la programmation "professionnelle" ne m'étonne pas car elle n'est pas soumise aux mêmes contraintes qu'un programmeur "en milieu non professionnel". Je n'aime pas la distinction programmeur "professionnel"/"hobbyste". Il faut prendre en compte que même si un programmeur "en milieu non professionnel" -et j'en conviens sans aucune difficulté et sans aucune prétention- peut pratiquer au moins au même niveau qu'un programmeur "en milieu professionnel", il n'en demeure pas moins que la seule contrainte du premier reste finalement "ses propres limites" et le temps qu'il veut accorder à leur franchissement et, que contrairement au second, il est dispensé de la contrainte très forte et impérative que représente le client. Evidemment, PB semble permettre de développer vite comme beaucoup d'autres langages... Mais contourner -si c'est possible- l'absence d'un générateur d'états ou l'absence de connecteurs natifs, cela ferait perdre combien de temps... du temps gagné par ailleurs ? C'est ce que j'aurais voulu "estimer"...

Cordialement. Gilles
Dernière modification par selzig le sam. 11/juil./2009 16:01, modifié 1 fois.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Bonjour selzig,

Concernant les générateurs d'états, je te conseille d'aller visiter le site suivant http://www.nxsoftware.com/ et d'aller voir "The Arctic reporting suite", il y d'autres logiciels sur ce site (tous fait en PureBasic) d'une très bonne qualité
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Bonjour,

Merci. Oui "seulement" compatibles Windows semble-t-il... J'avance doucement...

Cordialement. Gilles
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Je pense que la vraie question c'est est-ce que tu veux du Clic & Play? Si c'est oui, PureBasic ne fait pas l'affaire. Sinon, si tu va créer un service ou une boîte et que tu as besoin de fonctionnalités spécifiques comme l'optimisation, je pense que ce langage est très fiable et simple d'apprentissage. D'autres membres pourront, je l'espère te répondre plus précisément que moi, à l'instar comme à l'encontre de mon opinion.
Gilles a écrit :Mais comment fait-on pour que le fichier HTML s'ouvre directement dans le client de messagerie ?
Est-ce qu'on peut voir ton code s'il-te-plaît?

Ollivier
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Ollivier,

Que voulez-vous voir ? Le code PureBasic qui permettrait d'envoyer le fichier HTML (ou la réalisation de la même action dans un autre langage) ?
Je prends l'exemple fourni dans le PureBasic Démo.

Code : Tout sélectionner

SetMailBody(0, "Hello"+Chr(10)+"Ollivier")
AddMailAttachment(0, "","c:\pub\xpubUTF11.html","text/html")  
AddMailAttachment(0, "My description", "c:\pub\logo.png","image/x-png")
AddMailAttachment(0, "My description 2", "c:\pub\sup.png","image/x-png")
AddMailRecipient(0, "xxxxx@yyyyyyyy.fr", #PB_Mail_To)
Result = SendMail(0, "smtp.wanadoo.fr", 25, 1)
[...]
Il faudrait que je puisse injecter quelque chose dans le genre de ce code extrait d'une source internet

Code : Tout sélectionner

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))
En version démo, c'est infaisable... L'instruction SendMailData n'est pas disponible. Donc, avec cette version, on ne peut pas intervenir de manière assez pointue sur les Types Mine lors de la génération du mail.

Pour le reste,
tu veux du Clic & Play?
C'est très réducteur comme approche pour un programmeur. On se prend aussi souvent la tête avec des évènements sur des objets que sur du code purement procédural (du C par exemple)... et la satisfaction d'y arriver est la même. Et c'est bien là le principal. La méthode, on s'adapte, on choisit parmi un panel...

Merci pour votre aide.
Cordialement. Gilles
Dernière modification par selzig le sam. 11/juil./2009 18:25, modifié 3 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

selzig

va voir ce lien c'est un soft gratuit pour crée des applications il s'appelle Seccia 0.1.0.11

http://www.seccia.org
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Bonsoir,

Merci pour votre aide jbernard13. Je suis persuadé que le produit que vous me conseillez est digne d'intérêt mais ma curiosité se portait exclusivement sur PB.

Par contre, peut-être pourriez-vous me renseigner sur le deuxième point qui m'intéresse (message de 15:25 ci-dessus) : c'est-à-dire, est-il possible d'atteindre des bases distantes mysql ou postgresql sans ODBC, en accès natif s'il existe sous PB, tout en maintenant les connexions persistantes ?
Cordialement. Gilles
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Salut,

J'ai du mal à comprendre précisément avec un exemple concret. A mon souvenir, une boîte mail orange permet d'afficher directement le HTML sans avoir à ouvrir le mail, mais ce n'est pas le cas de l'ensemble des boîtes mail.

Deux hypothèses (parce que je ne peux rien vérifier, j'ai GMail et on n'ouvre pas un HTML automatiquement...)

1) Par la pièce jointe

Je pense que si une pièce jointe contient le type MIME précis en fonction du format (extension) du fichier joint, ça facilite son ouverture.

Dans ce code, plus bas, j'ai récupéré tous les types MIME de l'aide pour qu'ils soient retournés en fonction d'une extension fournie.

Une fois ce code copié en en-tête du programme, on peut écrire ceci:

Code : Tout sélectionner

Fichier.S = "Image.BMP"
AddMailAttachment(MailNo, MailDescription$, Fichier, GetMIMEType(StringField(Fichier, 2, ".") ) )
Ainsi, le fichier joint est rajouté dans le mail en cours de création et son type MIME respectif au format du fichier est inclu.

On rajoute autant de pièces jointes qu'il y a de parties dans le mail (texte, image, etc...)

ça me semble être la méthode la plus compatible puisqu'on précise bien que les pièces jointes ne sont pas des paquets de données quelconques. Mais dans ce cas, la boîte mail doit spécifiquement ouvrir les pièces jointes automatiquement.

2) Par le corps de l'e-mail (peu probable)

Ce n'est pas SendMailData() mais SetMailBody() où chaque ligne est séparée par un retour chariot, etc...

Dans ce cas, on crée son en-tête Content-type, on indique que c'est un mixage en plusieurs parties et on indique quelle expression de séparation on va fixer (boundary). Pour chaque partie on précise l'en-tête Content-type (texte, image, etc...) Mais ça ne me semble pas très commode comme hypothèse car tout ça c'est du texte et une image doit alors être encodée pour être compatible au texte.

Code : Tout sélectionner

;{

;{ Récupéré de l'aide, la liste des types MIME est stockée dans une section DATA }
DataSection

Data.S "  application/acad          | AutoCAD    dwg"
Data.S "  application/clariscad     | ClarisCAD  ccad"
Data.S "  application/drafting      | MATRA Prelude drafting   drw"
Data.S "  application/dxf           | AutoCAD  dxf"
Data.S "  application/i-deas        | SDRC I-deas  unv"
Data.S "  application/iges          | Format d'échange CAO IGES   igs,iges"
Data.S "  application/oda           | ODA  oda"
Data.S "  application/pdf           | Adobe Acrobat  pdf"
Data.S "  application/postscript    | PostScript   ai,eps,ps"
Data.S "  application/pro_eng       | ProEngineer  prt"
Data.S "  application/rtf           | Rich text   rtf"
Data.S "  application/set           | CAO SET  set"
Data.S "  application/sla           | stéréolithographie   stl"
Data.S "  application/solids        |  MATRA Solids   dwg"
Data.S "  application/Step          | de données Step  Step"
Data.S "  application/vda           | de surface   vda"
Data.S "  application/x-mif         | Framemaker   mif"
Data.S "  application/x-csh         | Script C-Shell (UNIX)   dwg"
Data.S "  application/x-dvi         | texte dvi  dvi"
Data.S "  application/hdf           | de données   hdf"
Data.S "  application/x-latex       | LaTEX  latex"
Data.S "  application/x-netcdf      | netCDF   nc,cdf"
Data.S "  application/x-sh          | Script Bourne Shell   dwg"
Data.S "  application/x-tcl         | Script Tcl  tcl"
Data.S "  application/x-tex         | fichiers Tex  tex"
Data.S "  application/x-texinfo     | eMacs  texinfo,texi"
Data.S "  application/x-troff       | Troff  t,tr,troff"
Data.S "  application/x-troff-man   | Troff/Macro man  man"
Data.S "  application/x-troff-me    | Troff/Macro ME   me"
Data.S "  application/x-troff-ms    | Troff/Macro MS   ms"
Data.S "  application/x-wais-source | Source Wais   src"
Data.S "  application/x-bcpio       | CPIO binaire  bcpio"
Data.S "  application/x-cpio        | CPIO Posix  cpio"
Data.S "  application/x-gtar        | Tar GNU   gtar"
Data.S "  application/x-shar        | Archives Shell  shar"
Data.S "  application/x-sv4cpio     | CPIO SVR4n  sv4cpio"
Data.S "  application/x-sv4crc      | CPIO SVR4 avec CRC  sc4crc"
Data.S "  application/x-tar         | compressés tar   tar"
Data.S "  application/x-ustar       | compressés tar Posix   man"
Data.S "  application/zip           | compressés ZIP   man"
Data.S "  audio/basic               | audio basiques   au,snd"
Data.S "  audio/x-aiff              | audio AIFF   aif,aiff,aifc"
Data.S "  audio/x-wav               | audio Wave   wav"
Data.S "  image/gif                 | Images gif  man"
Data.S "  image/ief                 | Images exchange format  ief"
Data.S "  image/jpeg                | Images Jpeg   jpg,jpeg,jpe"
Data.S "  image/png                 | Images Png  png"
Data.S "  image/tiff                | Images Tiff   tiff,tif"
Data.S "  image/x-cmu-raster        | Raster cmu  cmu"
Data.S "  image/x-portable-anymap   | Anymap PBM   pnm"
Data.S "  image/x-portable-bitmap   | Bitmap PBM   pbm"
Data.S "  image/x-portable-graymap  | Graymap PBM  pgm"
Data.S "  image/x-portable-pixmap   | Pixmap PBM   ppm"
Data.S "  image/x-rgb               | Image RGB   rgb"
Data.S "  image/x-xbitmap           | Images Bitmap X   xbm"
Data.S "  image/x-xpixmap           | Images Pixmap X   xpm"
Data.S "  image/x-xwindowdump       | Images dump X Window  man"
Data.S "  multipart/x-zip           | archive zip  zip"
Data.S "  multipart/x-gzip          | archive GNU zip  gz,gzip"
Data.S "  text/html                 | HTML   htm,html"
Data.S "  text/plain                | texte sans mise en forme   txt,g,h,c,cc,hh,m,f90"
Data.S "  text/richtext             | texte enrichis   rtx"
Data.S "  text/tab-separated-value  | texte avec séparation des valeurs  tsv"
Data.S "  text/x-setext             | texte Struct   etx"
Data.S "  video/mpeg                | Vidéos MPEG   mpeg,mpg,mpe"
Data.S "  video/quicktime           | Vidéos QuickTime  qt,mov"
Data.S "  video/msvideo             | Vidéos Microsoft Windows  avi"
Data.S "  video/x-sgi-movie         | Vidéos MoviePlayer  movie"

; On rajoute une chaîne vide pour créer un repérage de fin de données
Data.S ""

EndDataSection
;}



Global Dim Mime.S(255, 2) ; Table des types MIME de 256 lignes par 3 colonnes
Global MimeTypeQty.I



Procedure InitMIMETypeList() ; Procédure de chargement dans le tableau Mime()

   Protected DataLine.S ; Alloue la variable chaîne DataLine
   ; Exemple de valeur : "  application/acad          | AutoCAD    dwg"

   Protected TypeMime.S ; Alloue la variable chaîne TypeMime
   ; Exemple de valeur : "application/acad"

   Protected ExtraMime.S ;Alloue la variable chaîne ExtraMime 
   ; Exemple de valeur : "AutoCAD"

   Protected ExtMime.S ;  Alloue la variable chaîne ExtMime
   ; Exemple de valeur : "dwg"

   Protected LineNo.I ;   Alloue la variable numérique entière
   

   Repeat ; Départ de boucle de chargement des ligne de données de la section DATA
      
      Read.S DataLine ; Lit une ligne de donnée
      
      If DataLine ; La ligne est-elle non-vide ?
         
         ; Extrait la partie gauche de la ligne
         TypeMime  = Trim(StringField(DataLine, 1, "|") )
         
         ; Extrait la partie droite de la ligne
         ExtraMime = Trim(StringField(DataLine, 2, "|") )
         
         ; Extrait la/les extension(s)
         ExtMime   = Trim(StringField(ExtraMime, CountString(ExtraMime, " ") + 1, " ") )
         
         ; Occulte les extensions déjà extraites
         ExtraMime = Trim(Left(ExtraMime, Len(ExtraMime) - Len(ExtMime) ) )
         
         ; Enregistrement des infos extraites de la ligne de données
         ; dans la table Mime
         Mime(LineNo, 0) = TypeMime  ; 1ère colonne
         Mime(LineNo, 1) = ExtraMime ; 2nde colonne
         Mime(LineNo, 2) = ExtMime   ; 3ème colonne
         
         ; On indique qu'une ligne supplémentaire a été chargée dans la table
         LineNo + 1
         
      EndIf
   Until DataLine = "" ; Ligne vide? Oui=quitte la boucle
   ; Non=Retour à Repeat
   
   MimeTypeQty = LineNo
EndProcedure



Procedure.S GetMIMEType(Ext.S)
   Protected Result.S
   Protected I.I
   Protected J.I
   Protected MimeExtList.S
   Ext = UCase(Ext)
   Result = ""
   For I = 0 To (MimeTypeQty - 1)
      MimeExtList = UCase(Mime(I, 2) )
      For J = 0 To (CountString(MimeExtList, ",") + 1)
         If Ext = StringField(MimeExtList, J + 1, ",")
            Result = Mime(I, 0)
            Break 2
         EndIf
      Next
   Next
   If Result = ""
      Result = "application/octet-stream"
   EndIf
   ProcedureReturn Result
EndProcedure



   
   InitMIMETypeList() ; Ligne à insérer avant la boucle principale d'un code
;}

   
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Message par selzig »

Bonjour Ollivier

Merci pour le code. J'obtiens bien en effet la pièce jointe .html (et les autres)... affichée en dessous du "body".

Mais ce que je veux obtenir, c'est que le fichier.html apparaisse dans le body (évidemment sous réserve de l'inévitable "Afin de protéger,... Télécharger les images").
Le message Texte dans le body, ne sert qu'en cas où le client de messagerie ne peut pas afficher la page HTML...

J'ai continué à découvrir PB hier... Vraiment très surprenant.

Cordialement. Gilles
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Dans ce cas, il faut mettre ton HTML dans le corps du mail avec l'instruction SetMailBody() (c'est la seconde hypothèse à laquelle je ne croyais pas trop).

Est-ce que tu sais faire ça? C'est-à-dire créer un simple mail en deux sous-partie qui représentent les deux versions d'un texte: la première en texte brut et la seconde en texte enrichi en HTML?

Plan de création du corps du mail
En-tête global MIME indiquant que l'on a affaire à un document composé (multipart)

--Separation

En-tête indiquant le texte brut

Texte brut

--Separation

En-tête indiquant le texte en version HTML

Contenu HTML

--Separation--
Ollivier
Répondre