Page 1 sur 2

[R] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 01:48
par Gnifrus
Bonjour,

pour envoyer un e-mail, j'utilise la fonction "_INetSmtpMailCom" telle que définie à l'adresse http://www.autoitscript.com/forum/topic ... tachments/.

Cela fonctionne très bien, mais je souhaiterai aller plus loin, et insérer une image dans le corps de mon message.
J'arrive bien à insérer une image à partir d'un lien en définissant la variable $as_body comme suit (par exemple) :

Code : Tout sélectionner

$as_Body = '<HTML>' & @CRLF
$as_Body &= '<head>' & @CRLF
$as_Body &= '<title>Hello World</title>' & @CRLF
$as_Body &= '</head>' & @CRLF
$as_Body &= '<body>' & @CRLF
$as_Body &= '<img  src="http://www.xxxxxx.org/cours/images/image.gif">' & @CRLF
$as_Body &= '<font color="yellow">' & @CRLF
$as_Body &= 'Hello World' & @CRLF
$as_Body &= '</font>' & @CRLF
$as_Body &= '</HTML>' & @CRLF
Par contre, je voudrais aller chercher mon image sur mon disque dur, et ça, je n'y arrive pas !
En effet, si je remplace la 6ème ligne ci-dessus par :

Code : Tout sélectionner

$as_Body &= '<img  src="image.gif">' & @CRLF
ou

Code : Tout sélectionner

$as_Body &= '<img  src="C:\Users\xxxxxx\Desktop\image.gif">' & @CRLF
ou

Code : Tout sélectionner

$as_Body &= '<img  src="file:///image.gif">' & @CRLF
ou

Code : Tout sélectionner

$as_Body &= '<img  src="file:///C:/Users/xxxxxx/Desktop/image.gif">' & @CRLF
J'ai oublié de préciser que le mail arrive bien dans ma messagerie, mais il y a un schmilblick à la place de l'image ! :D

Y a un truc que je ne pige pas, ou bien ce n'est pas possible, tout simplement ?

Merci par avance pour vos réponses !
Bonne nuit,

Gnifrus.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 08:52
par DimVar
Bonjour,

Je ne connais pas HTML mais ne dois tu pas fermer ta balise IMG avec ">" ?


Cdlt, Dimvar.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 09:09
par Gnifrus
Bonjour DimVar,

Tu as effectivement raison, j'ai oublié de fermer la balise IMG.
Je viens de corriger mon message initial afin de tenir compte de ta remarque.

Par contre, ça ne change rien au problème...dommage... :(

Merci toutefois,
D'autres pistes ?

Cdlt, Gnif.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 09:42
par DimVar
Bon, je dois avoir un vieux script qui générait un faux mail d'Hadopi (pour faire peur aux copains :mrgreen: ), dans lequel j'y avais intégré l'image officiel d'Hadopi.
Je te posterai ça cet aprem.


Cdlt, Dimvar.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 09:52
par jbnh
A mon avis, l'image n'est pas uploadée avec le message donc est inexistante dans le mail.

Essaye d'abord d'uploader ton image sur un hôte tel quel imgur.com et met leur lien à la place, puis réessaye.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 10:24
par Y01
et en mettant

Code : Tout sélectionner

localhost\dossier$\image.gif
?

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 10:34
par Gnifrus
Merci tout d'abord pour votre aide... c'est sympa d'essayer de trouver une solution à mon problème.

Y01, ta solution ne fonctionne pas...désolé
jbnh, je pense comme toi que l'image n'est pas uploadée avec le message. En effet, comme indiqué dans mon post initial, si je remplace ma ligne 6 par

Code : Tout sélectionner

$as_Body &= '<img  src="http://www.xxxxxx.org/cours/images/image.gif">' & @CRLF
, ça fonctionne impeccable, mais ce n'est pas ce que je veux faire.
DimVar, c'est super cool si tu peux me faire passer ton vieux script, ça me rendrait énormément service....(il vaut mieux pas t'avoir en ami, toi :lol: )

Merci encore à tous,
Bonne journée,

Gnif.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 10:42
par Y01
J'ai peut être fait un trop grand raccourci dans mon message précédent.

Il faut créer un dossier partagé accessible par le réseau (que j'ai nommé dossier$ pour l'exemple) puis faire une ligne comme celle ci :

Code : Tout sélectionner

$as_Body &= '<img  src="\\localhost\dossier$\image.gif">' & @CRLF

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 11:09
par DimVar
Bon, je suis retourné voir les preco de la balise IMG, il semble qu'elle n'accepte que les chemins relatif et HTTP.
J'ai testé comme suit et ca fonctionne chez moi :
'<img src="./toto.gif">'

Où toto.gif se situe dans le dossier du script.

Cdlt, Dimvar.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 11:59
par Gnifrus
Y01, merci pour ta précision, mais ça ne fonctionne pas chez moi.

DimVar, je ne comprends pas... tu dis que ça fonctionne chez toi, mais moi, rien à faire...
Pourtant, l'image est bien dans le dossier du script, les balises correctement ouvertes avec les ' et les", comme indiqué dans ton post...
L'image n'est pas dans le mail reçu ! :(

J'pige pô.

Gnif.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 13:03
par DimVar
Voila le contenu de la variable (corps du mail) que j'avais utilisé :

Code : Tout sélectionner

$mail = '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">' & _
    '<head>' & _
    '</head>' & _
    '<img src="cid:h2lo1.png" alt="Hadopi" />' & _
etc...
CID = ContentID

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 13:12
par DimVar
Gnifrus a écrit : L'image n'est pas dans le mail reçu ! :(
Gnif.
Si tu écris le body dans un fichier .HTML, y est elle lorsque tu ouvres le fichier html ?

Code : Tout sélectionner

$mail = '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">' & _
    '<head>' & _
    '</head>' & _
    '<img src="cid:toto.gif" alt="Hadopi" />'


$fo = fileopen ("d:\toto.html",1)
filewrite ($fo,$mail)
fileclose ($fo)
shellexecute ("d:\toto.html")
 
[EDIT] je m'apercois - en relisant le code - que j'utilisais Blat pour l'envoi du mail.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 15:07
par Gnifrus
Re...

Bon je reviens vers vous après de (très) multiples essais...
DimVar, si j'écris le body dans un fichier .HTML, tel que tu l'as écrit dans Autoit, il s'affiche correctement, avec l'image. (en enlevant toutefois le "cid:").

Si je reprends le même code dans le "$as_Body", ça ne marche plus...

Je commence à me demander si la fonction "_INetSmtpMailCom" supporte bien cette fonctionnalité ?
Si ça se trouve, ce n'est tout simplement pas possible ? :(

Merci encore,

Gnif.

Re: [..] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 15:20
par Gnifrus
Ne cherchez plus !
Ce n'est effectivement pas possible avec cette fonction. (http://www.autoitscript.com/forum/topic ... -an-email/)

Il est dit :
'water', on 22 Aug 2011 - 7:22 PM, said:
_INetSmtpMailCom() doesn't support embedded pictures
Yep, that's why I referred to the AddRelatedBodyPart method which needs to be in-cooperated into the _INetSmtpMailCom() function.
Je vais continuer mes recherches du côté de ce "AddRelatedBodyPart"....

Merci quand même à tous d'avoir bien voulu prendre un peu de leur temps pour m'aider....

Je clos le topic.
Merci encore,

Gnif.

Re: [R] Envoi de mail et image dans le corps du message

Posté : mar. 27 janv. 2015 15:52
par walkson
Bonjour,
Peut être une piste: http://www.greywyvern.com/code/php/binary2base64 sur la base

Code : Tout sélectionner

 <img alt="Embedded Image" width="88" height="31" 
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgA..." />
Ce n'est pas le plus simple mais ça marche...

Re: [R] Envoi de mail et image dans le corps du message

Posté : mer. 28 janv. 2015 16:12
par Gnifrus
Merci walson,

Je ne sais pas vraiment quoi faire de ta piste.
Mes compétences ne sont pas assez poussées.
J'imagine qu'il faut en quelque sorte convertir l'image en data pour incorporer les données obtenues dans le code HTML. Le problème est qu'il s'agit d'une image, non disponible depuis un site web....bref, c'est un peu compliqué pour moi. Mais merci quand même... :)

Sinon, pour info, j'ai trouvé un post sur le forum anglais d'autoit (http://www.autoitscript.com/forum/topic ... -an-email/), et notamment un code fourni par TheBlacksheep, qui incorpore bien les images au $body du message.

Il faut inclure les images à la variable $AttachFiles et l'appeler dans le $body avec la balise <img src=""cid:marianne.jpg"">.

Pour ne pas afficher les images sous le message reçu en tant que pièces jointes, il faut supprimer la ligne $as_Body &= "<img src=""cid:" & $szFName & $szExt & """>" dans la fonction _INetSmtpMailCom.

Voilà, après, ne me demandez pas pourquoi, c'est de la bidouille et je ne comprends pas vraiment dans le détail ce que fait la fonction.
Mais je tenais à le faire partager ici, au cas où à l'avenir, quelqu'un d'autre chercherait à faire la même chose...

Mais peut-être des "autoitéciens" plus chevronnés pourront expliquer mieux que moi le fonctionnement de ce code ? :D

En tout cas, merci à tout le monde sans distinction d'avoir pu m'aider à avancer sur ce sujet nébuleux...

Bonne fin de journée,

Gnif.

Re: [R] Envoi de mail et image dans le corps du message

Posté : mer. 28 janv. 2015 18:57
par walkson
Bonjour,
Pour continuer sur mon idée:
► Afficher le texte
Soit vous lisez le TXT pour une utilisation multiple soit récupérer directement la variable $t comme ceci:

Code : Tout sélectionner

$as_Body &= '<img style="width: 200px; height: 200px;" alt="Embedded Image" src="data:image/png;base64,' & $t & '">' & @CRLF
Edit: comme j'aime bien vérifier quand je propose quelque chose:
► Afficher le texte

Re: [R] Envoi de mail et image dans le corps du message

Posté : jeu. 29 janv. 2015 17:50
par Gnifrus
Bonjour walkson,

Tout d'abord, un grand merci pour la peine que tu te donnes à ne pas vouloir me laisser dans la panade...C'est super cool. :D

J'ai essayé ton exemple, que je trouve vraiment super, car si j'ai bien saisi, il m'éviterait de devoir fournir les images avec mon code autoit.
Au début, je n'avais pas compris pourquoi mes images s'affichaient en grand, et étaient un peu floutées, mais j'ai compris que cela venait des dimensions de l'image, à régler dans le code HTML : "width: 100px; height: 250px;

Par contre, j'ai encore un soucis.
En effet, si je mets la bonne taille d'image (358 x 213 pixels), une de mes images (jpg) obtenue est tronquée sur le bas. Il doit manquer presque 1/3 de l'image.

Et si je reprends cette image et que je la convertis en gif, le rendu est conforme à mon attente.
C'est bizarre, mais du coup, en convertissant mes images en gif, je n'ai plus de problèmes...

C'est vraiment génial quand même !
Un grand merci encore et bonne fin de journée,

Gnif.

Re: [R] Envoi de mail et image dans le corps du message

Posté : lun. 02 févr. 2015 15:37
par Gnifrus
Re bonjour,

Me revoici, avec une nouvelle question, sur le même sujet...
Elle s'adresse plus précisément à walkson, mais tout le monde peut y répondre bien entendu ! :D

Le code généré à partir de la fonction "_Base64Encode($t)", peut-il être utilisé directement dans le programme, sans passer par un fichier txt à chaque fois ?

Pour faire plus simple, remplacer la variable $t dans la ligne :

Code : Tout sélectionner

$as_Body &= '<img style="width: 228px; height: 43px;" alt="Embedded Image" src="data:image/png;base64,' & $t & '">' & @CRLF
... par la valeur de $t, en l’occurrence, par les 6566 caractères qui représentent mon image en binaire ?

J'ai bien essayé, mais ça ne fonctionne pas...(pour ce faire, je remplace ' & $t & ' par un copier-coller du code contenu dans le fichier "binaireimage.txt")

Où est-ce que j'ai tout faux ?

Merci encore !

Bonne fin de journée,

Gnif.

Re: [R] Envoi de mail et image dans le corps du message

Posté : lun. 02 févr. 2015 20:04
par walkson
Bonjour,
Dans mon dernier message j'ai fait un [Edit] avec un exemple qui n'utilise pas le TXT mais passe bien par la variable $t et le résultat est sauvé dans Essai.htm
Si vous ouvrez Essai.htm en mode code source vous retrouverez l'image en binaire.
Autrement dit, quand vous envoyez votre mail, l'image est écrite dans le message ( non en pièce jointe mais en code html)
Le fichier TXT n'a d’intérêt que pour un usage multiple ou pour conserver l'image en (écriture) binaire.
J'espère avoir compris et répondu à votre question