Vous trouverez ci-dessous des instructions pour créer un "expéditeur d'e-mails" qui inclut une option pour envoyer des e-mails et des pièces jointes directement à partir d'une application Delphi. Avant de commencer, considérons l'alternative ...
Supposons que vous disposiez d'une application qui fonctionne sur certaines données de base de données, entre autres tâches. Les utilisateurs doivent exporter les données de votre application et envoyer les données par e-mail (comme un rapport d'erreur). Sans l'approche décrite ci-dessous, vous devez exporter les données vers un fichier externe, puis utiliser un client de messagerie pour les envoyer.
Envoi d'e-mails depuis Delphi
Il existe de nombreuses façons d'envoyer un e-mail directement depuis Delphi, mais la manière la plus simple consiste à utiliser le ShellExecute API. Cela enverra l'e-mail à l'aide du client de messagerie par défaut installé sur l'ordinateur. Bien que cette approche soit acceptable, vous ne pouvez pas envoyer de pièces jointes de cette façon.
Une autre technique utilise Microsoft Outlook et OLE pour envoyer l'e-mail, cette fois avec prise en charge des pièces jointes, mais MS Outlook doit ensuite être utilisé.
Une autre option consiste à utiliser la prise en charge intégrée de Delphi pour l'API Windows Simple Mail. Cela ne fonctionne que si l'utilisateur a installé un programme de messagerie compatible MAPI.
La technique dont nous discutons ici utilise Indy Composants (Internet Direct) - une excellente suite de composants Internet composée de protocoles Internet populaires écrits en Delphi et basés sur des sockets bloquants.
La méthode TIdSMTP (Indy)
L'envoi (ou la récupération) d'e-mails avec des composants Indy (fournis avec Delphi 6+) est aussi simple que de supprimer un ou deux composants sur un formulaire, de définir certaines propriétés et de "cliquer sur un bouton".
Pour envoyer un e-mail avec des pièces jointes de Delphi en utilisant Indy, nous aurons besoin de deux composants. Premièrement les TIdSMTOP est utilisé pour se connecter et communiquer (envoyer du courrier) avec un serveur SMTP. Deuxièmement, le TIdMessage gère le stockage et le codage des messages.
Quand le message est construit (quand TIdMessage est "rempli" de données), l'e-mail est remis à un serveur SMTP à l'aide du TIdSMTP.
Code source de l'expéditeur de l'e-mail
J'ai créé un projet d'expéditeur de courrier simple que j'explique ci-dessous. Vous pouvez télécharger le code source complet ici.
Remarque: Ce lien est un téléchargement direct dans le fichier ZIP du projet. Vous devriez pouvoir l'ouvrir sans aucun problème, mais si vous ne le pouvez pas, utilisez 7-Zip pour ouvrir l'archive afin d'extraire les fichiers du projet (qui sont stockés dans un dossier appelé Envoyer un mail).
Comme vous pouvez le voir sur la capture d'écran au moment du design, pour envoyer un e-mail à l'aide du TIdSMTP , vous devez au moins spécifier le serveur de messagerie SMTP (hôte). Le message lui-même a besoin des parties e-mail régulières remplies, comme le De, À, Matière, etc.
Voici le code qui gère l'envoi d'un e-mail avec une pièce jointe:
procédure TMailerForm.btnSendMailClick (Sender: TObject); commencer StatusMemo. Clair; // configuration SMTP SMTP.Host: = ledHost. Texte; SMTP.Port: = 25; // configuration du message électronique MailMessage. De. Adresse: = ledDe. Texte; MailMessage. Destinataires. EMailAddresses: = ledTo. Texte + ',' + ledCC.Text; MailMessage. Subject: = ledSubject. Texte; MailMessage. Corps. Texte: = Corps. Texte; si FileExists (ledAttachment. Texte) ensuite TIdAttachment. Créer (MailMessage. MessageParts, ledAttachment. Texte); //envoyer un mailessayeressayer SMTP.Connect (1000); SMTP.Send (MailMessage); saufsur E: Exception. StatusMemo. Lignes. Insérer (0, 'ERREUR:' + E.Message); fin; enfinsi SMTP.Connecté ensuite SMTP.Disconnect; fin; fin; (* btnSendMail Click *)
Remarque: À l'intérieur du code source, vous trouverez deux procédures supplémentaires qui sont utilisées pour définir les valeurs de la Hôte, De, et À des zones d'édition persistantes, utilisant un fichier INI pour le stockage.