Erreur sur Envoi mail en SMTP avec EXCHANGE

Posté par Machou43 le 20/9/2010 9:57:07
Bonjour, je ne comprends pas pourquoi mon code plante a chaque fois.

Le mail passe sans les pièces jointes !!!!

Pourtant l'adresse des fichiers est ok !!

Si quelqu'un a une lumière sur mon code :

PROCEDURE LanceOutlookSmtp(Ch_TypeDossier est une chaîne,Ch_FichiersJoints est une chaîne)
//** Déclaration des Variables **
Ch_TexteMail est une chaîne
Ent_NumFichierJoint est entier
Ch_ServeurMail est une chaîne
Ch_MailDest est une chaîne
Ch_MailExp est une chaîne
Ch_RecapErreur est une chaîne
Ch_NomExpServeur est une chaîne
i est un entier
//** On lance la saisie du mail client **
Ch_MailDest = Ouvre(Fen_Question,"Veuillez saisir l'adresse E-Mail du Client ?","Mail",WDClient.CLEmail)
//** On regarde si le mail est saisi correctement **
SI Ch_MailDest = "" ALORS
	Erreur("Envoi du mail impossible car aucune adresse n'a été saisie !!!")
	RETOUR
FIN
//** On récupère le nom du serveur **
Ch_ServeurMail = INILit("MAILS","SERVEUR","",Gp_Ch_ParametrageIni)
SI Ch_ServeurMail = "" ALORS
	Erreur("Le serveur de mail n'est pas renseigné dans les paramétrages !!!","","Veuillez contacter votre administrateur !!")
	RETOUR
FIN
//** Expéditeur du message **
HLitRecherchePremier(WDUsers,gpw_login,Gp_Ch_USER_Login)
SI HTrouve(WDUsers) ALORS
	Ch_MailExp = WDUsers.USEMAIL
	Ch_NomExpServeur = ExtraitChaîne(Ch_MailExp,1,"@",DepuisDébut)
SINON
	Erreur("Votre profil messagerie n'est pas paramétré dans WINDEVIS, Veuillez contacter votre administrateur !!!")
	RETOUR
FIN
//** CORPS DU MAIL **
SELON Ch_TypeDossier
	CAS "Devis" :
		Ch_TexteMail = "Veuillez trouver ci-joint le devis concernant vos menuiseries...."
	CAS "Confirmation de commande" :
		Ch_TexteMail = "Veuillez trouver ci-joint la confirmation de commande concernant vos menuiseries...."
	CAS "Facture" :
		Ch_TexteMail = "Veuillez trouver ci-joint la facture concernant vos menuiseries...."
	AUTRES CAS :
		Ch_TexteMail = "Veuillez trouver ci-joint le devis concernant vos menuiseries...."
FIN
//** Message d'attente **
OuvreFille(Fen_OK,"Envoi du message en cours." + RC + RC + "Veuillez patienter...")
//** Ouverture d'une session SMTP
SI EmailOuvreSessionSMTP(Ch_NomExpServeur,"",Ch_ServeurMail,25,EmailOptionDéfaut) = Faux ALORS
	Erreur(ErreurInfo(errComplet))
	RETOUR
FIN
//** Remise à zéro des variables Email **
EmailRAZ()
//** Demande d'un accusé de réception **
Email.AccuséRéception = Vrai
//** Paramétrage de l'expéditeur **
Email.Expéditeur = Ch_MailExp
//** Destinataire(s) du message **
Email.NbDestinataire = 1
Email.Destinataire[1] = Ch_MailDest
//** Mise en place de l'affichage des variables **
Ch_RecapErreur = "Serveur : " + Ch_ServeurMail + RC + "Nom User SMTP : " + Ch_NomExpServeur + "Expéditeur : " + Ch_MailExp + RC + "Destinataire : " + Ch_MailDest + RC
//** Pièces jointes **
Ent_NumFichierJoint = 1
//** On affecte le nombre de fichiers attachés avant l'affectation **
Email.NbAttache = ChaîneOccurrence(Ch_FichiersJoints,RC) +1
Ch_RecapErreur += "Nb Fichiers Joints : " + Email.NbAttache + RC
//tantque ExtraitChaîne(Ch_FichiersJoints,Ent_NumFichierJoint,rc,DepuisDébut) <> eot
POUR i = 1 _A_ Email.NbAttache
	//** On attache le fichier **
	Email.Attache[Ent_NumFichierJoint] = ExtraitChaîne(Ch_FichiersJoints,Ent_NumFichierJoint,RC,DepuisDébut)
	Email.IdentifiantAttache[Ent_NumFichierJoint] = "Piece" + Ent_NumFichierJoint
	//** Prévision message erreur **
	Ch_RecapErreur += "Fichier Joint " + Ent_NumFichierJoint + " : " + ExtraitChaîne(Ch_FichiersJoints,Ent_NumFichierJoint,RC,DepuisDébut) + RC
	//** Incrémentation du compteur **
	Ent_NumFichierJoint++
FIN
//** Sujet et contenu du message **
Email.Sujet = Ch_TypeDossier + " GAUTHIER"
Email.Message = Ch_TexteMail
Email.HTML = ""
//** Envoi du message **
SI EmailEnvoieMessage(Ch_NomExpServeur) = Faux ALORS
	Erreur(EmailMsgErreur(Email.Erreur),"",Ch_RecapErreur)
SINON
	//** On signifie que le message a bien été envoyé **
	Info("Le message a été transmis à " + Ch_MailDest + " !!!")
FIN
//** Fermeture de la session SMTP **
EmailFermeSession(Ch_NomExpServeur)
//** Fermeture de la fenêtre d'attente **
Ferme(Fen_OK)

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=21&topic_id=6451&post_id=25485