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 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
| // Résumé : Prépare le mail pour l'afficher dans le client de messagerie par défaut ou pour l'envoyer directement
// Syntaxe :
//[ <Résultat> = ] PrépareMail (<ObjetMail> est chaîne, <CorpsMail> est chaîne [, <EnvoiDirecte> est booléen [, <AvecAccusé> est booléen]])
//
// Paramètres :
// ObjetMail (chaîne) : Objet du message
// CorpsMail (chaîne) : Contenue du message
// EnvoiDirecte (booléen - valeur par défaut=0) : Vrai si on envoie le mail sinon on affiche le client de messagerie
// AvecAccusé (booléen - valeur par défaut=0) : <indiquez ici le rôle de AvecAccusé>
// Valeur de retour :
// booléen :
//// Exemple :
// SI PAS :PrépareMail("Objet du message",Texte_RTF) ALORS
// SI ErreurInfo(errCode) = 501 ALORS
// Info("L'utilisateur a annulé l'envoie")
// SINON
// Erreur(dbgInfo(dbgLigne),ErreurInfo(errMessage))
// FIN
// FIN
//
PROCEDURE PrépareMail(ObjetMail est une chaîne,CorpsMail est une chaîne,EnvoiDirecte est un booléen = Faux,AvecAccusé est un booléen = Faux)
LOCAL
Sujet est une chaîne ASCIIZ sur 128
Body est une chaîne ASCIIZ sur 1000
MAPI_LOGIN_UI est un entier
MAPI_TO est un entier
N_I est un entier // compteur
hdlLib est un entier
hRes est un entier
// définition des structures
MapiMessage est une structure
ulReserved est un entier
lpszSubject est un entier
lpszNoteText est un entier
lpszMessageTyp est un entier
lpszDateReceived est un entier
lpszConversationID est un entier
flFlags est un entier
lpOriginator est un entier
nRecipCount est un entier
lpRecips est un entier
nFileCount est un entier
lpFiles est un entier
FIN
MapiFileDesc est une structure
ulReserved est un entier
flFlags est un entier
nPosition est un entier
lpszPathName est un entier
lpszFileName est un entier
lpFileType est un entier
FIN
MapiRecipDesc est une structure
ulReserved est un entier
ulRecipClass est un entier
lpszName est un entier
lpszAddress est un entier
ulEIDSize est un entier
lpEntryID est un entier
FIN
MapiMessage est une MapiMessage
tabMapiFileDesc est un tableau de TableauOccurrence(:TabFicPieceJointe) MapiFileDesc
tabMapiRecipDesc est un tableau de TableauOccurrence(:TabAdresseDestinataire) MapiRecipDesc
TabPieceJointe est un tableau de TableauOccurrence(:TabFicPieceJointe) chaîne ASCIIZ sur 255
TabNomPieceJointe est un tableau de TableauOccurrence(:TabFicPieceJointe) chaîne ASCIIZ sur 255
TabNomAdresse est un tableau de TableauOccurrence(:TabAdresseDestinataire) chaîne ASCIIZ sur 128
TabAdresse est un tableau de TableauOccurrence(:TabAdresseDestinataire) chaîne ASCIIZ sur 255
// si pas de destinataire on renvoie Faux
SI TableauOccurrence(:TabAdresseDestinataire) =0 ALORS
ErreurDéclenche(431,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Il n'y as aucun destinanatire")
RENVOYER Faux
FIN
// On met à jour la structure des destinataires à partir du tableau dynamique
POUR N_I = 1 _A_ TableauOccurrence(:TabAdresseDestinataire)
// on prend l'adresse du destinataire
TabAdresse[N_I]=:TabAdresseDestinataire[N_I][1]
TabNomAdresse[N_I]=:TabAdresseDestinataire[N_I][2] = "" ? :TabAdresseDestinataire[N_I][1] SINON :TabAdresseDestinataire[N_I][2]
MAPI_TO=Val(:TabAdresseDestinataire[N_I][3])
// on force "SMTP:" si besoin dans l'adresse
SI Position(TabAdresse[N_I],"SMTP:")=0 ALORS
TabAdresse[N_I]="SMTP:"+TabAdresse[N_I]
FIN
tabMapiRecipDesc[N_I]:ulReserved = 0
tabMapiRecipDesc[N_I]:ulRecipClass = MAPI_TO
tabMapiRecipDesc[N_I]:lpszName = &TabNomAdresse[N_I]
tabMapiRecipDesc[N_I]:lpszAddress = &TabAdresse[N_I]
tabMapiRecipDesc[N_I]:ulEIDSize = Null
tabMapiRecipDesc[N_I]:lpEntryID = Null
FIN
// on met à jour la structure des pièces jointes à partir du tableau dynamique
POUR N_I=1 _A_ TableauOccurrence(:TabFicPieceJointe)
TabPieceJointe[N_I]=:TabFicPieceJointe[N_I]
TabNomPieceJointe[N_I]=""
tabMapiFileDesc[N_I]:ulReserved = Null
tabMapiFileDesc[N_I]:flFlags = 0
tabMapiFileDesc[N_I]:nPosition = 0xFFFFFFFF
tabMapiFileDesc[N_I]:lpszPathName = &TabPieceJointe[N_I]
tabMapiFileDesc[N_I]:lpszFileName = &TabNomPieceJointe[N_I]
tabMapiFileDesc[N_I]:lpFileType = Null
FIN
// on affecte l'objet et le corps
Sujet=ObjetMail
Body=CorpsMail
// on regarde si on doit ouvrir le client de messagerie ou non
SI EnvoiDirecte ALORS
MAPI_LOGIN_UI=1 // on envoi directement
SINON
MAPI_LOGIN_UI=8 // on ouvre le client de messagerie
FIN
// chargement de la librairie Mapi32.dll
hdlLib = AppelDLL32("Kernel32","LoadLibraryA","MAPI32.dll")
SI hdlLib<32 ALORS
ErreurDéclenche(432,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Impossible de charger MAPI32.DLL" + RC + ErreurInfo(errMessage))
RENVOYER Faux
FIN
SI TableauOccurrence(TabFicPieceJointe) > 0 ALORS // on a des pièces jointes
MapiMessage:nFileCount = TableauOccurrence(tabMapiFileDesc)
MapiMessage:lpFiles = &tabMapiFileDesc
SINON // on n'en a pas
MapiMessage:nFileCount = 0
MapiMessage:lpFiles = Null
FIN
// on affecte la structure du message
MapiMessage:ulReserved = 0
MapiMessage:lpszSubject = &Sujet
MapiMessage:lpszNoteText = &Body
MapiMessage:lpszMessageTyp = Null
MapiMessage:lpszDateReceived = Null
MapiMessage:lpszConversationID = Null
SI AvecAccusé ALORS
MapiMessage:flFlags = 2
SINON
MapiMessage:flFlags = 0
FIN
MapiMessage:lpOriginator = Null
MapiMessage:nRecipCount = TableauOccurrence(tabMapiRecipDesc)
MapiMessage:lpRecips = &tabMapiRecipDesc
hRes = AppelDLL32("MAPI32.DLL","MAPISendMail",Null,Handle(),&MapiMessage,MAPI_LOGIN_UI,Null)
SI hRes<> 0 ALORS // il y a eu un problème
Temporisation(50)
SELON hRes
CAS 1
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "L'envoi a été annulé par l'utilisateur.")
CAS 2
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Erreurs inattendues.")
CAS 3
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Il n'y a pas de compte par défaut ou la connexion n'a pas été valide.")
CAS 4
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Disque plein.")
CAS 5
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Pas assez de mémoire.")
CAS 9
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Il y a trop de pièces jointes.")
CAS 10
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Il y a trop de destinataires.")
CAS 11
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "La pièce jointe n'a pas été trouvée.")
CAS 12
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "La pièce jointe n'a pas pu être ouverte.")
CAS 14
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Destinataire inconnu.")
CAS 15
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Le type de destinataire n'est pas Mapi_To, Mapi_Cc, Mapi_Bcc.")
CAS 17
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Message invalide.")
CAS 18
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Le texte du message est trop long.")
CAS 21
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Destinataire ambigu.")
CAS 25
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + "Destinataire invalide ou n'a pas d'adresse.")
AUTRES CAS
ErreurDéclenche(500 + hRes,dbgInfo(dbgElément)+ RC + RC + "Erreur : " + RC + ErreurInfo(errMessageSystème))
FIN
SI hdlLib>0 ALORS
AppelDLL32("Kernel32","FreeLibrary",hdlLib)
hdlLib = 0
FIN
RENVOYER Faux
SINON
SI hdlLib>0 ALORS
AppelDLL32("Kernel32","FreeLibrary",hdlLib)
hdlLib = 0
FIN
RENVOYER Vrai
FIN |