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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Gnifrus le jeu. 05 févr. 2015 10:56, modifié 5 fois.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#2

Message par DimVar »

Bonjour,

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


Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#4

Message 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.
Modifié en dernier par DimVar le mar. 27 janv. 2015 13:13, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#5

Message 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.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

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

#6

Message par Y01 »

et en mettant

Code : Tout sélectionner

localhost\dossier$\image.gif
?
Y01
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#7

Message 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.
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

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

#8

Message 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
Y01
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#9

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#10

Message 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.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#11

Message 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
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#12

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#13

Message 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.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#14

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#15

Message 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...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#16

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#17

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#18

Message 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.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

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

#19

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#20

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre