Execute Delphi News

L'actualité Delphi par http://www.execute.fr RSS « Avant | Après »

Envoyer un mail en HTML avec Delphi

Publié le 29/01/2018
Il est relativement facile d'envoyer un mail avec Delphi, avec la suite Indy on peut composer son mail avec du HTML, des images incluses, des pièces jointes...et hop un coup de SMTP et le mail part...le seul petit soucis est qu'il faut configurer la connexion SMTP évidemment...de plus, si vous voulez conserver le mail dans la boîte d'envoi, il faut passer par une session IMAP.

De son côté MAPI - à ne pas confondre avec IMAP - permet d'envoyer un mail avec le logiciel mail de l'utilisateur quel qu’il soit (le logiciel...et l'utilisateur aussi d'ailleurs), sans avoir à rien configurer (par exemple via le composant JEDI TJvMail)...mais MAPI est une vieille technologie qui ne supporte par les mails HTML, surtout avec des images incluses.

Devant ce manque terrible j'ai trouvé une astuce qui semble bien fonctionner, il suffit de deux lignes de code si vous composez déjà votre mail avec Indy (dans mon produit l'utilisateur a le choix entre SMTP et MAPI)

// idMessage: TidMessage
begin
  // composer le message 
  // ...
  // l'ouvrir dans le logiciel de messagerie par défaut
  idMessage.ExtraHeadesr.Add('X-Unsent: 1');
  idMessage.SaveToFile('message.eml');
  ShellExecute(0, 'open', 'message.eml', nil, nil, SW_SHOW); 
end;

il reste juste à installer un plugin pour Thunderbird car il ne supporte toujours pas X-Unsent.

Un petit rien qui serait sympa

Publié le 26/01/2018
Petite amélioration qui n'a l'air de rien mais qui me ferait gagner un temps précieux...pouvoir faire un clic droit sur la configuration (debug, release...) et avoir l'option "Afficher dans l'explorateur" pour arriver directement sur l’exécutable :)

https://quality.embarcadero.com/browse/RSP-19832

Décompression d'un flux GZIPé

Publié le 23/01/2018
Il est assez frustrant de tomber sur une erreur aussi peu explicite que "data error" quand on cherche à décompresser un flux avec TZDecompressionStream.

Ce que l'aide en ligne ne précise pas, c'est que le paramètre WindowBits permet de spécifier que le flux possède une entête GZIP. Cette entête est facile à identifier, elle commence par la séquence $1F $8B alors que TZCompressionStream produira une entête ZLIB $78 $9C par exemple.

La valeur de WindowBits doit être comprise entre 8 et 15 avec 15 pour le meilleur taux de compression, mais si vous ajouter 16 à cette valeur, ZLib gérera l'entête GZIP.

Moralité, pour décompresser un flux GZIP (commençant par $1F $8B) il faut créer le flux comme ceci GZ := TZDecompressionStream.Create(Source, 31);

Un voyage inattendu

Publié le 16/01/2018
Je viens de passer la nuit sur la résolution d'un bug tordu (dans mon code).

Toutes les explications sur sur LookInside.

Retour d'expérience sur Delphi / Firemonkey

Publié le 10/01/2018
Je viens de voir sur Developpez.com un retour d'expérience très intéressant sur le couple Delphi/Firemonkey