IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

MAIL via MAPI


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut MAIL via MAPI
    Bonjour,

    est-il possible via le client mail par défaut d'envoyer un message depuis DELPHI à PLUSIEURS destinataires?

    En utilisant la méthode préconisée sur le forum, cela ne fonctionne que pour un seul destinataire.

    Merci d'avance.

    JC DETHIER

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Par défaut
    bin tu peux par exemple
    avec une boucle for, envoyer le mail pour chaque adresse que tu veux ...
    en les mettant dans une listbox ou un memo

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    Non car j'affiche le client pour un envoi unique à tous les destinataires.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    J'ai resolu mon PB

    Je chargeais les destinataires à l'aide dune chaine que je délimitais par un ';'.
    Il faut utiliser une TSTRINGLIST et cela marche.

    Bon WE

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    Je m'étais un peu précipité.

    Le résultat est également incorrect avec la TStringList

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Citation Envoyé par JCDC Voir le message
    Le résultat est également incorrect avec la TStringList
    On est bien renseigné, là, pour savoir ce qui cloche...

    'fin bon, si j'ajoute plusieurs destinataires depuis mon carnet d'adresses, OE les sépare avec "; " sans les guillemets. Vue, l'espace après le point-virgule ? (vue parce qu'en typographie, ce mot est féminin--fin de l'apparté).
    Reconstruis une string à partir des données de ta StringList en pensant à ça.

    Et dis-nous !
    --
    jp

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    Non cela ne marche pas. Si je ne mets qu'une seule adresse sans "; ", le point virgule est présent dans l'adresse du client de messagerie.

    A +

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Citation Envoyé par JCDC Voir le message
    Non cela ne marche pas.
    Ch'tit rappel, ce sont les humains qui marchent, les logiciels, eux, ne fonctionnent pas. Et on ne sait toujours pas ce qui ne fonctionne pas...
    Citation Envoyé par JCDC Voir le message
    Si je ne mets qu'une seule adresse sans "; ", le point virgule est présent dans l'adresse du client de messagerie.
    C'est génant ? Parce que je viens de faire l'essai avec mon OE à moi, en rajoutant "; " à la fin de mon adresse de test, j'ai envoyé et OE n'a rien dit, et j'ai reçu sur l'adresse de test.
    Valà,
    --
    jp

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    Exact, je n'ai pas dis que mettre un ';' empêchait le FONCTIONNEMENT mais simplement que si l'on ne le mets pas il est quand même présent dans le client de messagerie.

    Quand à mettre plusieurs adresses dans OE ou n'importe quel autre client de messagerie il n'y aucun problème cela fonctionne sans problème. La différence, provient que je génère le message depuis DELPHI via MAPI.

    J' ai trouvé le problème. Cela provenait d'une mauvaise utilisation d'une procédure SEDMAIL que j'ai trouvé sur le forum. Cette procédure n'accepte qu'une seule adresse. Il faut gérer les adresses comme on gère les fichiers attachés.

    J'ai corrigé la procédure, et je la mettrai en ligne ce soir, en clôturant le dialogue.

    Désolé JIPETE, je pense que le mauvais choix de mes termes t'a empêché de m'aider.

    Merci à tous.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 34
    Par défaut
    Comme promis la procedure d'envoi multi destinataires via MAPI.

    If faut passer à SendEMail une TString (Mail) générée de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i := 0 To nbrTo - 1 do
         mail.values['to'+IntToStr(i)] := <adresse du destinataire(i) To >;
    For i := 0 To nbrCc - 1 do
         mail.values['bcc'+IntToStr(i)] :=<adresse du destinataire(i) Cc >;
    For i := 0 To nbrBcc - 1 do
         mail.values['bcc'+IntToStr(i)] :=<adresse du destinataire(i) Bcc >;
    mail.values['subject'] := 'Sujet ...';
    mail.values['body'] := 'Votre message...';
    For i := 0 To nbrPJ - 1 do
         mail.values['attachment'+IntToStr(i)] :=<nom de la pièce jointe(i)  >;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    function SendEMail(Handle: THandle; Mail: TStrings): Cardinal;
    type
      TReceipArray = ARRAY [0..0] of TMapiRecipDesc;
      PReceipArray = ^TReceipArray;
      TAttachAccessArray = array [0..0] of TMapiFileDesc;
      PAttachAccessArray = ^TAttachAccessArray;
    var
      MapiMessage: TMapiMessage;
      Receips: PReceipArray;
      Attachments: PAttachAccessArray;
      nbrDestTo,nbrDestCC,nbrDestBcc,AttachCount: Integer;
      i1, iR: integer;
      tox,Destinataire,FileName: string;
      dwRet: Cardinal;
      MAPI_Session: Cardinal;
      WndList: Pointer;
    begin
      dwRet := MapiLogon(Handle,
        PChar(''),
        PChar(''),
        MAPI_LOGON_UI or MAPI_NEW_SESSION,
        0, @MAPI_Session);
     
      if (dwRet <> SUCCESS_SUCCESS) then
      begin
      MessageBox(Handle,
          PChar('Erreur pendant l''envoi du mail'),
          PChar('Erreur'),
          MB_ICONERROR or MB_OK);   end
      else
      begin
        FillChar(MapiMessage, SizeOf(MapiMessage), #0);
        Attachments := nil;
        Receips := nil;
        nbrDestTo := 0;
        nbrDestCC := 0;
        nbrDestBCC := 0;
        for i1 := 0 to MaxInt do
          begin
            if Mail.Values['to' + IntToStr(i1)] = '' then   break;
            Inc(nbrDestTo);
          end;
        for i1 := 0 to MaxInt do
          begin
            if Mail.Values['cc' + IntToStr(i1)] = '' then   break;
            Inc(nbrDestCC);
          end;
        for i1 := 0 to MaxInt do
          begin
            if Mail.Values['bcc' + IntToStr(i1)] = '' then   break;
            Inc(nbrDestBCC);
          end;
        if (nbrDestTo+nbrDestCC+nbrDestBcc) > 0 then
           GetMem(Receips, SizeOf(TMapiRecipDesc) * (nbrDestTo+nbrDestCC+nbrDestBcc));
        iR := -1;
        if nbrDestTo > 0 then
           For i1 := 0 to nbrDestTo -1 do
               begin
               Inc(iR);
               Destinataire := Mail.Values['to' + IntToStr(i1)];
               Receips[iR].ulReserved := 0;
               Receips[iR].ulRecipClass := MAPI_TO;
               Receips[iR].lpszName := StrNew(PChar(Destinataire));
               Receips[iR].lpszAddress := StrNew(PChar('SMTP:' + Destinataire));
               Receips[iR].ulEIDSize := 0;
               end;
        if nbrDestCC > 0 then
           For i1 := 0 to nbrDestCC -1 do
               begin
               Inc(iR);
               Destinataire := Mail.Values['cc' + IntToStr(i1)];
               Receips[iR].ulReserved := 0;
               Receips[iR].ulRecipClass := MAPI_CC;
               Receips[iR].lpszName := StrNew(PChar(Destinataire));
               Receips[iR].lpszAddress := StrNew(PChar('SMTP:' + Destinataire));
               Receips[iR].ulEIDSize := 0;
               end;
        if nbrDestBcc > 0 then
           For i1 := 0 to nbrDestBcc -1 do
               begin
               Inc(iR);
               Destinataire := Mail.Values['bcc' + IntToStr(i1)];
               Receips[iR].ulReserved := 0;
               Receips[iR].ulRecipClass := MAPI_BCC;
               Receips[iR].lpszName := StrNew(PChar(Destinataire));
               Receips[iR].lpszAddress := StrNew(PChar('SMTP:' + Destinataire));
               Receips[iR].ulEIDSize := 0;
               end;
        MapiMessage.nRecipCount := NbrDestTo+NbrDestCC+NbrDestBcc;
        MapiMessage.lpRecips := @Receips^;
        AttachCount := 0;
     
        for i1 := 0 to MaxInt do
        begin
          if Mail.Values['attachment' + IntToStr(i1)] = '' then
            break;
          Inc(AttachCount);
        end;
     
        if AttachCount > 0 then
        begin
          GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);
     
          for i1 := 0 to AttachCount - 1 do
          begin
            FileName := Mail.Values['attachment' + IntToStr(i1)];
            Attachments[i1].ulReserved := 0;
            Attachments[i1].flFlags := 0;
            Attachments[i1].nPosition := ULONG($FFFFFFFF);
            Attachments[i1].lpszPathName := StrNew(PChar(FileName));
            Attachments[i1].lpszFileName :=
              StrNew(PChar(ExtractFileName(FileName)));
            Attachments[i1].lpFileType := nil;
          end;
          MapiMessage.nFileCount := AttachCount;
          MapiMessage.lpFiles := @Attachments^;
        end;
     
        if Mail.Values['subject'] <> '' then
          MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
        if Mail.Values['body'] <> '' then
          MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));
     
        WndList := DisableTaskWindows(0);
        try
        Result := MapiSendMail(MAPI_Session, Handle,
          MapiMessage, MAPI_DIALOG, 0);
        finally
          EnableTaskWindows( WndList );
        end;
     
        for i1 := 0 to AttachCount - 1 do
        begin
          StrDispose(Attachments[i1].lpszPathName);
          StrDispose(Attachments[i1].lpszFileName);
        end;
     
        if Assigned(MapiMessage.lpszSubject) then
          StrDispose(MapiMessage.lpszSubject);
        if Assigned(MapiMessage.lpszNoteText) then
          StrDispose(MapiMessage.lpszNoteText);
        for i1 := 0 to (NbrDestTo+NbrDestCC+NbrDestBcc) - 1 do
        begin
        if Assigned(Receips[i1].lpszAddress) then
          StrDispose(Receips[i1].lpszAddress);
        if Assigned(Receips[i1].lpszName) then
          StrDispose(Receips[i1].lpszName);
        end;
        MapiLogOff(MAPI_Session, Handle, 0, 0);
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de mail via MAPI
    Par castorcharly dans le forum Web & réseau
    Réponses: 0
    Dernier message: 14/03/2009, 08h24
  2. [WIN32][D7] Envoi de mail via MAPI
    Par Benjamin GAGNEUX dans le forum Web & réseau
    Réponses: 2
    Dernier message: 12/01/2007, 10h22
  3. Envoi de mail via un macro vba sur excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/12/2005, 18h51
  4. envoi de mail via Oracle
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 26
    Dernier message: 07/11/2005, 10h20
  5. Créer un mail via une appli
    Par Cedced dans le forum C++
    Réponses: 5
    Dernier message: 11/10/2005, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo