Apprendre à envoyer des mails avec Delphi
Un tutoriel de Robin Valtot

Le , par gvasseur58, Responsable Delphi
Ce tutoriel de Robin Valtot, réalisé avec la version 10.1.2 Berlin (Entreprise et Starter) de Delphi, a pour objectif de montrer plusieurs façons d'envoyer un mail au moyen de cet EDI.

S'appuyant sur la présence d'un client de messagerie, seront tour à tour étudiés un serveur SMTP, le pilotage d'Outlook et la mise en œuvre de l'ensemble MAPI.

http://robin-valtot.developpez.com/t...s-avec-delphi/

L'équipe Delphi de developpez.com profite de cette publication pour féliciter chaleureusement l'auteur de ce tutoriel qui vient d'être promu MVP Delphi : c'est la juste reconnaissance des qualités et du travail de ce jeune collaborateur. Bravo Robin, et merci pour tes contributions à la communauté !

Et vous ?

Que pensez-vous de ce tutoriel ?
Comment utilisez-vous Delphi pour tout ce qui touche au Web ?

Retrouver les meilleurs cours et tutoriels pour apprendre Delphi
Retrouver les meilleurs cours et tutoriels pour apprendre la programmation


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de retwas retwas - Membre expérimenté https://www.developpez.com
le 20/03/2017 à 20:24
Merci Gilles

Si vous souhaitez que je développe un sujet précis la prochaine fois, vous pouvez m'en parler : je ferai mon possible pour les prochains articles
Avatar de der§en der§en - Membre habitué https://www.developpez.com
le 20/03/2017 à 22:38
Curieux de voir si cela fonctionne avec un Exchange serveur…
Avatar de gbegreg gbegreg - Membre éprouvé https://www.developpez.com
le 20/03/2017 à 23:48
Félicitations Retwas

As tu pu avancer sur ton autre tutoriel en cours (le jeu du Démineur en FMX) ? Car il est également très bien !
Je comprendrai parfaitement que tu n'ai pas eu le temps : je n'ai pas avancé moi non plus sur mon prochain tuto (remake du jeu The Light Corridor)
Avatar de SergioMaster SergioMaster - Rédacteur/Modérateur https://www.developpez.com
le 21/03/2017 à 7:58
Bonjour,

perso, j'ai été dérouté, envoyer des mails, on avait déjà les FAQs, quelques tutoriels et les exemples d'Indy et je me disais (à tort peut être) à quoi bon
En fait c'est plus l'approche par l'intermédiaire des interfaces pour utiliser les différentes possibilités qui est intéressante, à mon avis il aurait fallu plus expliquer le pourquoi de cette démarche.
Ceci étant, bravo, je sais qu'il est difficile d'écrire des tutoriels, surtout si l'on n'est pas un littéraire. J’espère que beaucoup d'autres membres se sentent aussi des talents d'auteurs
Avatar de Bernard B Bernard B - Membre habitué https://www.developpez.com
le 21/03/2017 à 9:29
Beau tuto bien fait !

Par contre en tant que vieux développeur autodidacte qui a commencé en Turbo pascal sur Amstrad (les jeunes zont jamais vu !!) je ne comprend pas tout !

Les interfaces, je rejoins SergioMaster, elles apportent quoi de plus ? Je n'y vois qu'une couche de complexité supplémentaire. Peut-on m'éclairer ?
Autre interrogation : dans l'objet TMessageSenderSMTP pourquoi faire des get et des set dans la gestion des property alors qu'il me semble qu'une simple référence à la variable interne fait l'affaire.

Je vais tester de ce pas car je suis en plein dans l'envoi de mails !
Actuellement j'utilise plutôt l'objet SmtpClient de ICS car je trouve la bibli Indy horriblement compliquée et assez mal documentée.
Avatar de Paul TOTH Paul TOTH - Expert éminent sénior https://www.developpez.com
le 21/03/2017 à 9:55
Citation Envoyé par Bernard B Voir le message
Beau tuto bien fait !

Par contre en tant que vieux développeur autodidacte qui a commencé en Turbo pascal sur Amstrad (les jeunes zont jamais vu !!) je ne comprend pas tout !

Les interfaces, je rejoins SergioMaster, elles apportent quoi de plus ? Je n'y vois qu'une couche de complexité supplémentaire. Peut-on m'éclairer ?
Autre interrogation : dans l'objet TMessageSenderSMTP pourquoi faire des get et des set dans la gestion des property alors qu'il me semble qu'une simple référence à la variable interne fait l'affaire.

Je vais tester de ce pas car je suis en plein dans l'envoi de mails !
Actuellement j'utilise plutôt l'objet SmtpClient de ICS car je trouve la bibli Indy horriblement compliquée et assez mal documentée.
alors en lisant rapidement le code, je ne vois pas bien non plus l'intérêt des interfaces plutôt qu'une classe ancêtre avec des méthodes virtuelles....

pour ce qui est des propriétés et des setters, c'est justement lié aux interfaces qui réclament des getter/setter qu'il faut donc implémenter.
Avatar de retwas retwas - Membre expérimenté https://www.developpez.com
le 21/03/2017 à 11:21
Citation Envoyé par der§en Voir le message
Curieux de voir si cela fonctionne avec un Exchange serveur…
J'ai testé sur le serveur Exchange je n'ai pas eu de problème

Citation Envoyé par gbegreg Voir le message
Félicitations Retwas

As tu pu avancer sur ton autre tutoriel en cours (le jeu du Démineur en FMX) ? Car il est également très bien !
Je comprendrai parfaitement que tu n'ai pas eu le temps : je n'ai pas avancé moi non plus sur mon prochain tuto (remake du jeu The Light Corridor)
Merci gbegreg
Pour le démineur je vais me pencher à nouveau dessus ce mois ci, il me reste seulement le soucis des images sur la version mobile ..
Hâte de voir ton second tutoriel, je connais pas le jeu original, je dois être trop jeune

Citation Envoyé par SergioMaster Voir le message
Bonjour,

perso, j'ai été dérouté, envoyer des mails, on avait déjà les FAQs, quelques tutoriels et les exemples d'Indy et je me disais (à tort peut être) à quoi bon
En fait c'est plus l'approche par l'intermédiaire des interfaces pour utiliser les différentes possibilités qui est intéressante, à mon avis il aurait fallu plus expliquer le pourquoi de cette démarche.
Ceci étant, bravo, je sais qu'il est difficile d'écrire des tutoriels, surtout si l'on n'est pas un littéraire. J’espère que beaucoup d'autres membres se sentent aussi des talents d'auteurs
Merci pour tes remarques et effectivement je suis loin d'être littéraire..
Les interfaces permettent justement d'apporter quelque chose de nouveau par rapport aux autres tutoriels ou FAQ et de passer cette impression de "déjà vu".

Citation Envoyé par Bernard B Voir le message
Beau tuto bien fait !

Par contre en tant que vieux développeur autodidacte qui a commencé en Turbo pascal sur Amstrad (les jeunes zont jamais vu !!) je ne comprend pas tout !

Les interfaces, je rejoins SergioMaster, elles apportent quoi de plus ? Je n'y vois qu'une couche de complexité supplémentaire. Peut-on m'éclairer ?
Autre interrogation : dans l'objet TMessageSenderSMTP pourquoi faire des get et des set dans la gestion des property alors qu'il me semble qu'une simple référence à la variable interne fait l'affaire.

Je vais tester de ce pas car je suis en plein dans l'envoi de mails !
Actuellement j'utilise plutôt l'objet SmtpClient de ICS car je trouve la bibli Indy horriblement compliquée et assez mal documentée.
Citation Envoyé par Paul TOTH Voir le message
alors en lisant rapidement le code, je ne vois pas bien non plus l'intérêt des interfaces plutôt qu'une classe ancêtre avec des méthodes virtuelles....

pour ce qui est des propriétés et des setters, c'est justement lié aux interfaces qui réclament des getter/setter qu'il faut donc implémenter.
Merci Bernard B, je suis curieux de connaitre ton retour
Les interfaces sont là pour apporter quelque chose de nouveau par rapport aux tutoriels existants mais aussi montrer une autre façon de coder.

Une interface ne peut contenir que des méthodes (public) c'est pourquoi il y a des getter et setter.
Si tu as besoin il y a une explication ici ou alors dans l'excellent livre de Nick Hodges "Coding in Delphi".

Le point fort des interfaces est de permettre de découpler son code, limiter la dépendance des classes, avoir un code plus clair, plus propre et plus facile à maintenir, de proposer uniquement la ou les méthodes nécessaires et pas forcément travailler avec/sur l'objet en entier, la portée d'une interface permet aussi de se passer de sa libération.
Cela permettra de voir un peu plus tard les injections de dépendances.

Quoi qu'il en soit, comme le souligne Paul TOTH cela est aussi possible avec des classes "normales"
Avatar de Paul TOTH Paul TOTH - Expert éminent sénior https://www.developpez.com
le 21/03/2017 à 15:40
Citation Envoyé par retwas Voir le message
Le point fort des interfaces est de permettre de découpler son code, limiter la dépendance des classes, avoir un code plus clair, plus propre et plus facile à maintenir, de proposer uniquement la ou les méthodes nécessaires et pas forcément travailler avec/sur l'objet en entier, la portée d'une interface permet aussi de se passer de sa libération.
Cela permettra de voir un peu plus tard les injections de dépendances.
alors oui et non, si tu regardes Firemonkey par exemple, ils ont mis des interfaces partout...sauf que comme ce n'est pas toujours bien documenté, on est amené à se plonger dans le code pour comprendre ce qu'il se passe, et là on tombe sur des interfaces pas plus documentés et il faut aller à la pêche pour retrouver où c'est implémenté bon ceci dit avec des classes virtuelles ça donne un peu la même chose, mais il est plus facile de retrouver les Constructor que quand on tombe sur ce genre de code
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
procedure TCommonCustomForm.BeginInternalDrag(const Source: TObject; const ABitmap: TObject);
var
  D: TDragObject;
  DDService: IFMXDragDropService;
begin
  if Assigned(Source) then
  begin
    Fillchar(D, SizeOf(D), 0);
    D.Source := Source;
    if TPlatformServices.Current.SupportsPlatformService(IFMXDragDropService, IInterface(DDService)) then
      DDService.BeginDragDrop(Self, D, FMX.Graphics.TBitmap(ABitmap));
  end;
end;
cf http://lookinside.free.fr/delphi.php?FMXBasedDragDrop

mais pour le découplage c'est bien oui...par exemple au lieu de faire référence explicitement à une fiche mère, on peut exploiter une interface dans la fiche fille qui sera implémentée par la fiche mère, du coup la fiche fille pourra facilement être utilisée dans n'importe quel projet, y compris en changeant la fiche principale, pour peu qu'on implémente l'interface quelque part.
Avatar de Bernard B Bernard B - Membre habitué https://www.developpez.com
le 21/03/2017 à 20:52
Bien il semble que les interface permettent de séparer l'utilisation de la mécanique interne. Mais dans la POO de base c'est bien la différence entre public et private.

L'article dont retwas me donne le lien, je l'avais déjà parcouru il y a un certain temps. Je l'ai relu et je suis toujours aussi dubitatif. C'est compliqué et finalement on ne voit pas surgir l'élément incontournable qui fait que l'on s'y colle.
Je n'avais pas tout suivi et rebelote c'est compliqué pour quoi ?
Je dois dire que l'exemple que donne Paul est assez impressionnant. Perso je n'y comprend rien ! et le pire c'est que l'on ne devine pas à quoi cela peut conduire.
La POO suivant son implémentation ce n'est pas toujours simple, mais les interfaces ressemblent à la forêt vierge.
Les cerveaux plus jeunes sont certainement plus malléables mais là le mien à atteint le seuil de son incompétence !
Avatar de retwas retwas - Membre expérimenté https://www.developpez.com
le 21/03/2017 à 20:56
@PaulTOTH : Exactement c'est vrai qu'en débogage faut parfois aller chercher un peu plus loin, mais c'est une autre façon de coder que je trouve peut être plus "moderne", je vois d'ailleurs que tu les utilises pour le TMouse3D mais je n'ai pas la prétention de pouvoir t'apprendre quelque chose
Offres d'emploi IT
International Business Developer (H/F)
Cellfish Media - Ile de France - Île-de-France
Ingénieur développeur - c++, java, sql, vba
Be Relax - Ile de France - Paris (75017)
Ingénieur de développement : application web pour analyser des données temporelles de gènes rapporte
Inria - Ile de France - Grenoble/Montbonnot

Voir plus d'offres Voir la carte des offres IT
Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -