MAILS AVEC INDY10 : CONTENTTYPE/CONTENTID/PARENTPART

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 10 janv. 2008 à 16:35
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 12 oct. 2011 à 13:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45372-mails-avec-indy10-contenttype-contentid-parentpart

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 oct. 2011 à 13:08
Tans mieux!

Je n' utilise pas cette unité car je suis habitué à faire la construction du mail "manuellement" ce qui m' a permis de comprendre comment ça marche.

A+
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
12 oct. 2011 à 12:56
Ca marche! Avec IdMessageBuilder, cela fait exactement ce que je cherchais.

j'ai le message "Afficher les contenus maintenant" et quand on clique dessus les images apparaissent!

merci Mauricio! T'es un chef!

A+
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 oct. 2011 à 10:58
Salut Gérard,

pour info, j' utilise Indy Tiburon (version unicode) car j' ai Delphi 2009. Je n' ai à ce jour aucun problème d' envoi/réception de mails.
Toute autre version de Indy peut poser problème car seule la version Tiburon est mise à jour: peut-être que ton problème à l' envoi vient de ta version d' Indy!?
Sinon, c' est forcément le contentPart du TIdMessage.

Bonne chance,

A+
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
12 oct. 2011 à 10:53
Bien sûr, c'est ce que j'ai fait, mais cela n'a pas été reconnu!
Je ne dois pas l'avoir dans le package Turbo Delphi que j'utilise.
en fait je viens de faire une recherche dans l'ordi entier et je viens de le trouver. Je vais l'inclure au projet et te dire si je progresse!
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 oct. 2011 à 10:42
Ajoute l' unité IdMessageBuilder.pas à tes "Uses".

Aide à l' utilisation:
http://www.indyproject.org/sockets/blogs/RLebeau/20080116.EN.aspx

A+
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
12 oct. 2011 à 10:36
Il me semble avoir assez bien compris ce que tu expliques, mais malheureusement, même en précisant le type Multipart/alternative comme tu le proposes, cela ne change rien:

Si je ne crée pas le TIDAttachmentfile, j'ai bien le texte html, si je l'ajoute, j'ai bien l'image dans le corps mais plus le texte!

Je suis vraiment désolé....

d'autre part, je n'ai pas trouvé l'accès au IdMessageBuilder. il me semble pourtant avoir Indy10...
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
10 oct. 2011 à 11:15
Salut Gérard,

ton problème vient de cette ligne:
mess.ContentType := 'multipart/related; type="text/html"';

comme je l' explique, la valeur que l' on donne à mess.ContentType dépend de plusieurs facteurs:
- Si on envoi le message en texte simple alternatif
- Si on envoi le message en texte au format Html
- Si on envoi des images embouties au format html
- Si on envoi des pièces jointes

Une mauvaise indication de cette propriété et c' est la galère assurée!

Dans ton exemple, tu as du texte html + texte simple alternatif + image emboutie.
La valeur à mettre est donc: 'multipart/related; type="multipart/alternative"'
Si tu y mets en plus une piece jointe, il faut mettre 'multipart/mixed'

Tout ceci est expliqué plus haut ...

Alternativement, les compos Indy viennent avec une nouvelle classe qui permet de simplifier l' envoi de mails: TIdMessageBuilder !

A+
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
8 oct. 2011 à 17:11
Bon j'ai continué à explorer ce domaine, mais j'en arrive provisoirement à une conclusion plutôt pessimiste. en effet, une amie à qui j'envoie aussi mes tests ne reçois pas tout à fait la même chose que moi lorsque je m'envoie le mail ci-dessus.
donc Mauricio, si par gentillesse tu testes mon code, tu risques aussi de ne pas constater ce que je vois!
Du coup je suis allé voir directement chez le postmaster et non plus dans le gestionnaire de messagerier, et chez les deux postmaster que je regarde je n'y ai pas trouvé non plus la même chose.
a la poste.net, bien qu'un pièce jointe soit annoncée dans la corbeille attachée au mail envoyé, quand on ouvre celui-ci on n'y trouve ni le message, ni la pièce jointe.
chez gmail, par contre on trouve à la fois le message et la pièce jointe, pas avec une présentation super mais enfin ils y sont.
On a donc à faire à une situation où il semblerait que les différents intervenants interprètent la norme MIME comme ils l'entendent!
En gros il y a trois intervenants: Indy qui est chargé de coder, le postmaster qui fait ce qu'il en veut, et le gestionnaire de messagerie qui en fait aussi ce qu'il en veut.

comme mon intention était de diffuser aux différents joueurs sur notre site qui ont tous des postmasters différents et des gestionnaires itou, je me vois mal parti!

Il doit bien y avoir une solution, car on reçoit bien ce type de mail, mais laquelle?
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
7 oct. 2011 à 19:19
Merci de ta réponse rapide, mais cela ne marche toujours pas.
j'ai pourtant fait le plus simple possible, une petite page html avec une image.
J'ai soit le texte si je ne mets pas le TIdAttachmentfile, soit l'image, mais pas les deux!
mon code:
VAR
emailAddress: string;
smtp: TIdSMTP;
mess: TIdMessage;
HtmlPart: Integer; //Indice de l' objet TIdText avec le corps en HTML, ça va permettre de lier un autre objet à cet TidText.
PlainTextParentPart: Integer; // ParentPart que l' on va mettre pour l' objet contenant le corps en plain/text.
HtmlParentPart: Integer; // ParentPart que l' on va mettre pour l' objet contenant le corps en HTML.
idTexto : TIdText;
const
TextHTML='<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Test</title>'
+'</head>Ceci est un essai.'
+'</html>';
begin
smtp:= TIdSMTP.create;
mess:= TIdMessage.Create;
smtp.Port := 25;
smtp.Username:= 'Gerard';
smtp.Password:= 'PassWord';
smtp.Host := 'smtp.gmail.com';
smtp.Connect;
with TIdText.Create(mess.MessageParts, Nil) do
begin
ContentType := 'multipart/alternative';
end;
// Cet objet a le code 0 (part), donc on informe les variables pour faire la liaison plus tard:
HtmlParentPart := 0;
PlainTextParentPart := 0;
// Corps au format HTML :
idTexto := TIdText.Create(mess.MessageParts, Nil);
idTexto.Body.Text := TextHTML;
idTexto.ContentType := 'text/html';
idTexto.ParentPart := HtmlParentPart;
// Corps au format Plain-Text :
idTexto := TIdText.Create(mess.MessageParts, Nil);
idTexto.Body.Text := 'Ceci est un essai.';
idTexto.ContentType := 'text/plain';
idTexto.ParentPart := PlainTextParentPart;
{with TIdAttachmentFile.Create(Mess.MessageParts, 'C:\Bridgez\Web Server\Relance\RoadMap.jpg') do
Begin
ContentID:= 'RoadMap';
contentType:= 'image/jpeg';
ParentPart := HtmlParentPart;
FileName:= 'RoadMap.jpg';
End; }
mess.From.Text := 'Bridgez';
mess.Subject := 'Test HTML'; //;
mess.Recipients.EMailAddresses := emailAddress;
mess.ContentType := 'multipart/related; type="text/html"';
if smtp.Connected then
smtp.Send(mess);

end;
Merci de ton aide en tout cas!
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
7 oct. 2011 à 12:09
Salut Gerard,

comme explique ci-dessu:
Le problème est qu' il faut correctement définir:
- la propriété ContentType du compo TIdMessage et de chaque objet (TIdText par exemple) inclu dans notre TIdMessage.
- la propriété ContentType/FileName/ContentID/ParentPart de l' objet TIdAttachmentFile.
- la propriété ContentType/ParentPart de l' objet TIdText.

Je pense que ton problème vient de la propriété ContentType du compo TIdMessage:
idMsg.ContentType := xxx;
En effet, selon que tu aies du Html ou/et du texte simple alternatif ou/et des anexes ou/et des images embouties, il faut définir correctement la propriété idMsg.ContentType car sinon certains éléments peuvent être cachés.

A+
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
7 oct. 2011 à 11:56
Merci pour tout ce travail, mais finalement je n'y arrive pas.
a chaque fois que j'envoie le mail, je reçois la page Html sans les images qui devraient y être rattachées, (lorsque je ne mets aucun TidAttachmentFile) mais aussitôt que j'y mets un attachment, je ne reçois que celui-ci, et pas la page html dans laquelle il devrait se trouver.

j'ai pas mal tourné autour mais je n'y suis toujours pas arrivé.
voilà la façon dont j'ajoute les attachment: c'est peutêtre là que vient le problème?
with TIdAttachmentFile.Create(Mess.MessageParts, 'C:\Bridgez\Web Server\Relance\RoadMap.jpg') do
Begin
ContentID:= 'RoadMap';
contentType:= 'image/jpeg';
ParentPart := HtmlParentPart;
FileName:= 'RoadMap.jpg';
End;
J'ai essayé tous les type de MailContent, rien n'a changé....
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 janv. 2008 à 20:42
@mauricio :
Oui oui intéressant..mais maintenant, il faut faire la synthèse entre le source de Francky et le tien !
et il faut du temps..
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 janv. 2008 à 20:04
@francky :
Oué oué je fais ma pub ^^. Bien comme ca Cantador comprendra l'expression "créer plus intiment ces mails" lol.

c'est surtout tes 11 points d'explications complémentaires que tu as gentiment fournis qui ont ébloui le forum.
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
11 janv. 2008 à 10:09
Encore une fois désolé pour la traduction, j' ai passé beaucoup de temps sur ce tuto, mais cette phrase m' a échappée!!!
A+
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
11 janv. 2008 à 10:07
Bonjour à tous,

désolé mais la phrase n' a pas été traduite, d' ailleurs, elle ne devrait même pas être lá étant donné que c' est un commentaire juste pour mon programme d' oú est tiré le code(Bonne traduc Cari). Cela veut dire que mon programme mail envoie toujours le texte au format simple comme alternative, donc mon mail à envoyer ne sera jamais de ce type, je répète: dans mon cas biensûr ...

Ça me gène pas que vous fassiez votre pub, d' ailleurs, ça m' interesse et je vais regarder cela plus tard ...

A+
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
10 janv. 2008 à 22:27
Bonsoir Delphiprog,

Ca signifie:
« Nous n'utilisons pas ce type parce que nous utilisons toujours le format texte dans nos mails ».

Enfin... sous contrôle de MAURICIO qui rectifiera si nécessaire.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
10 janv. 2008 à 22:05
Bonsoir les amis,

Encore un bon code [Made by Mauricio].

Mais, qu'est-ce que signifie donc : "Não usamos este tipo porque mandamos sempre o mail em formato texto ..." ?

J'avoue que j'ai la flemme de (faire) traduire cette phrase :(
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
10 janv. 2008 à 16:58
Salut Cari,

c' est ma 3ème source je crois sur les compos Indy concernant les mails, je traite les problèmes que j' ai rencontré afin d' en faire bénéficier les membres ...

C' est sûr que Billou, bem maintenant qu' il a fait une console potable, bem il veut plus bosser lol ...

Les mauvaises langues diront que c' est parce qu' il en a marre de faire le show deavnt des milliers de personnes pour présenter des produits qui s' autodétruisent tout seul (lá je pense surtout à la XBox360).

A+
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
10 janv. 2008 à 16:42
Un commentaire quand même:

-On ne pourra bientôt plus dire « chez Billou »... ;)
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
10 janv. 2008 à 16:35
Salut MAURICIO,

Je n'ai pas de courrier à envoyer pour le moment... :)
Mais sûr que ton tuto me sera utile un jour et que je m'y plongerai en premier.

Merci d'avance.