FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 920, dernière mise à jour : 8 novembre 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireMicrosoft OfficeMicrosoft OutlookContacts et Mails (8)
précédent sommaire suivant
 

Une fois la connexion réalisée et le dossier récupéré on peut initialiser un objet TContactItem.

La méthode Find permet de rechercher un élément dans une collection d'items. On utilise la syntaxe suivante :
[nom_de_propriété]='valeur' and/or/not [nom_de_propriété]='valeur'

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
var DossierContact : MAPIFolder; 
    UnContact: ContactItem; 
    Filter:Olevariant; 
begin 
 DossierContact := EspaceDeNom.GetDefaultFolder(olFolderContacts); 
  // La recherche peut se faire sur tout ou partie du contenu d'une propriété 
  //'[LastName] >= ''Da'' and [lastName] < ''Db'''; 
 Filter:= '[LastName] = ''Dardenne'' and [FirstName] = ''Laurent'''; 
  
 UnContact:=DossierContact.Items.Find(Filter) as ContactItem; 
 if UnContact<>Nil 
  then ListeAncienContacts.Items.Add(UnContact.FullName + ': ' + UnContact.Email1Address); 
end;
L'utilisation des propriétées privées se fait via la collection UserProperties
Code delphi : Sélectionner tout
maPropriété: =UnContact.UserProperties.Find('DateDernierContact');

Mis à jour le 18 janvier 2014 Laurent Dardenne

Une fois récupéré le dossier comme indiqué dans "Récupérer un dossier dans le dossier principal", seul le code de création du contact diffère.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
... 
  AnciensContact:= Dossiers.Folders.Item(NomDossier); 
  
  UnContact := AnciensContact.Items.Add(olContactItem) as ContactItem; 
  UnContact.LastName  := 'Nom'; 
  ... // Idem 
  Contact.Save; 
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

Pour créer un nouveau mail on appelle la méthode CreateItem de l'objet Application.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var DossierContact : MAPIFolder; 
    UnMail : MailItem; 
begin 
    // Crée un élément MailItem représentant un courrier électronique 
 UnMail:=Outlook.CreateItem(olMailItem) as MailItem; 
  
   // Ajoute un ou plusieurs destinataires 
 UnMail.Recipients.Add('Nom@UrlServerMail.Fr'); 
 UnMail.Subject := 'Au sujet d''Outlook'; 
  
  // Ajoute un retour chariot pour séparer le corps du message des pièces jointes 
 UnMail.Body := 'Corps du message envoyé'+#13#10; 
  
   //Ajoute une ou plusieurs pièces jointes 
 UnMail.Attachments.Add('C:\temp\Document.txt', olByValue, EmptyParam, EmptyParam); 
  
   // Place le mail dans la boîte d'envoi, mais ne l'envoi pas. 
 UnMail.Send; 
end;
La collection recipients contient tous les destinataires.
La collection attachments contient tous les pièces jointes au mail. D'après la documentation il est préférable d'enregistrer le mail avant de modifier la collection attachments.

Mis à jour le 18 janvier 2014 Laurent Dardenne

Le code suivant vous permet de créer un nouveau mail avec OutLook à partir de Delphi.
Le code n'effectue aucune vérification notamment en ce qui est du format des adresses mails de destination.
Cette tâche est laissée au soin du lecteur.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
type 
  
//Enumération qui décrit le niveau de priorité du mail 
  enumImportance=(Bas=olImportanceLow,Normal=olImportanceNormal,Haut=olImportanceHigh);  
  
//Structure qui décrit entièrement le mail à envoyer  
  TEmail = record  
    dDateRecept   : TDateTime;  
    dDateCreation : TDateTime;  
    sSenderName   : String;  
    sSenderMail   : String;  
    sCC           : String;  
    sDestinataires : String;  
    sSujet        : String;  
    sContenu      : String;  
    iPriorite     : enumImportance; 
    iSize         : integer;  // en octet  
    iNbPiecesJointes      : integer;  
    tCheminPiecesJointes  : array of string;  
end;  
  
function TOutlook.CreerEmail(Mail : TEmail): boolean;  
var  
  vMail  : variant;  
  i      : integer;  
  vRecipient : variant;  
  lTemp  : TStringList;  
begin  
  Result := true;  
  try  
    //Création du mail  
    vMail  := vApplication.CreateItem(0);  
    //Ajout des destinataires  
    //On pourra éventuellement tester le format des adresses 
    //ainsi que s'assurer que celles-ci sont séparées par un ; 
    vRecipient := vMail.Recipients.Add(Mail.sDestinataires);  
    vRecipient.Type := 1;  
    if Mail.sCC <> '' then  
    begin  
      lTemp := TStringList.Create;  
      lTemp.Delimiter := ';';  
      lTemp.DelimitedText := Mail.sCC;  
      for i := 0 to lTemp.Count - 1 do  
      begin  
        vRecipient := vMail.Recipients.Add(lTemp.Strings[i]);  
        vRecipient.Type := 2;  
      end;  
      lTemp.Free;  
    end;  
    //Ajout du sujet  
    vMail.Subject     := Mail.sSujet;  
    //Ajout de la priorité  
    vMail.Importance  := Integer(Mail.iPriorite);  
    //Ajout de pièce jointe  
    for i := 0 to Mail.iNbPiecesJointes -1 do  
    begin  
      vMail.Attachments.Add(Mail.tCheminPiecesJointes[i]);  
    end;  
    //Affichage de l'Email  
    vMail.Display;  
  except  
    Result := false;  
  end;  
end;

Mis à jour le 18 janvier 2014 Charette

La méthode Send d'un objet MailItem ne prend pas en charge l''envoi des mails vers votre serveur de mails.
On doit utiliser les objets CommanBars déclarés dans l'unité Office2000 qui permet d'appeler le menu 'Envoyer/recevoir'.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
var 
  MenuOutils: CommandBar; 
  EnvoiRecoiMenuItem, 
  ToutLesComptes: CommandBarControl; 
  
begin 
  MenuOutils := (Outlook.ActiveExplorer.CommandBars as CommandBars).Item['Tools']; 
  EnvoiRecoiMenuItem := MenuOutils.Controls['Envoyer/recevoir']; 
  ToutLesComptes:= (EnvoiRecoiMenuItem.Control as CommandBarPopup).Controls['Tous les comptes']; 
  ToutLesComptes.Execute; 
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

Le code suivant nous permet d'envoyer un mail avec le client par défaut.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function SendMail(const Subject, MessageText, MailFromName, MailFromAddress,  
  MailToName, MailToAddress: String; const attachments: array of String; WinHandle: THandle = 0):  
  
boolean;  
var  
  MAPIError: DWord;  
  MapiMessage: TMapiMessage;  
  Originator, Recipient: TMapiRecipDesc;  
  Files, FilesTmp: PMapiFileDesc;  
  FilesCount: Integer;  
begin  
  FillChar(MapiMessage, Sizeof(TMapiMessage), 0);  
  MapiMessage.lpszSubject := PChar(Subject);  
  MapiMessage.lpszNoteText := PChar(MessageText);  
  FillChar(Originator, Sizeof(TMapiRecipDesc), 0);  
  Originator.lpszName := PChar(MailFromName);  
  Originator.lpszAddress := PChar(MailFromAddress);  
  MapiMessage.lpOriginator := @Originator;  
  MapiMessage.nRecipCount := 1;  
  FillChar(Recipient, Sizeof(TMapiRecipDesc), 0);  
  Recipient.ulRecipClass := MAPI_TO;  
  Recipient.lpszName := PChar(MailToName);  
  Recipient.lpszAddress := PChar(MailToAddress);  
  MapiMessage.lpRecips := @Recipient;  
  MapiMessage.nFileCount := High(attachments) - Low(attachments) + 1;  
  Files := AllocMem(SizeOf(TMapiFileDesc) * MapiMessage.nFileCount);  
  MapiMessage.lpFiles := Files;  
  FilesTmp := Files;  
  for FilesCount := Low(attachments) to High(attachments) do  
  begin  
    FilesTmp.nPosition := $FFFFFFFF;  
    FilesTmp.lpszPathName := PChar(attchments[FilesCount]);  
    Inc(FilesTmp)  
  end;  
  try  
    MAPIError := MapiSendMail(0, 0,  
      MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);  
    result:= MAPIError = 0;  
  finally  
    FreeMem(Files)  
  end  
end;

Mis à jour le 18 janvier 2014 Pierre Castelain

La méthode CreateItem crée un nouvel élément Outlook et ne peut créer que des éléments Outlook dans les dossiers par défaut.
Pour créer des éléments à l'aide d'un formulaire personnalisé, utilisez la méthode Add sur la collection Items.

Code delphi : Sélectionner tout
OutlookApplication.CreateItem(ItemType)
ItemType est l'une des constantes OlItemType suivantes déterminant le type du nouvel élément à créer :
  • olAppointmentItem
  • olContactItem
  • olJournalItem
  • olMailItem
  • olNoteItem
  • olPostItem
  • olTaskItem

Mis à jour le 18 janvier 2014 Laurent Dardenne

Dans ce cas on utilise la méthode Createitem de l'objet application.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var 
  OutlNamespace: Namespace; 
  ContactFolder: MAPIFolder; 
  Contact: ContactItem; 
begin 
  Contact := Outlook.Createitem(olContactItem) as ContactItem; 
  Contact.LastName  := 'Nom'; 
  Contact.FirstName := 'Prénom'; 
  Contact.HomeAddressStreet := 'Rue'; 
  Contact.HomeAddressCountry := 'France'; 
  Contact.HomeAddressPostalCode := '75000'; 
  Contact.HomeAddressCity := 'Paris'; 
  Contact.HomeTelephoneNumber := '01 02 03 04 05'; 
  Contact.HomeFaxNumber := '06 07 08 09 10'; 
  Contact.Email1Address := 'Personne@Provider.com'; 
  Contact.Save; 
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.