Utilisation de SmtpClient

nicogarou Messages postés 3 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 29 novembre 2007 - 28 nov. 2007 à 19:16
v_vince_v Messages postés 2 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 6 décembre 2007 - 6 déc. 2007 à 17:43
Bonsoir,
J'ai un programme d'envoi de mail qui doit envoyer un fichier en pièce jointe.
J'ai utilisé cette source. Une fois le fichier envoyer, je dois soit l'effacer, soit le renommer , soit le déplacer ... suivant ce qui est passé en paramètre de l'executable.

Le code utilise SmtpClient (.NET 2.0) et la méthode Send.
Mon ami MSDN me dit que send bloque l'exécution du programme pendant l'envoi du mail (sinon il y a SendAsync).
Il me dit aussi que l'accès au fichier pièce jointe est verrouillé pendant l'envoi.

Donc normalement, la fonction d'envoi terminée, je peux faire ce que je veux de mon fichier pièce jointe.

Ce n'est pas le cas.
L'accès au fichier se solde irrémédiablement par "le fichier est actuellement utilisé par un autre utilisateur/processus".
Je peux le copier, mais pas le supprimer ou le déplacer.

Quand le programme se termine, le fichier pièce jointe est deverrouillé, mais j'ai besoin de lui libre avant!

Existe-t-il un moyen de le déverrouiller dans le programme?

Je ne veux pas lancer mon programme dans un .bat  qui effacerait le fichier pièce jointe après exécution.
(en effet, il est possible que l'utilisateur ne veuille pas l'effacer à chaque fois)

Merci de m'éclairer sur la question.

7 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
28 nov. 2007 à 20:24
Bah !! moi je ferais une copie du fichier que tu veux envoyer et c'est cette copie que j'enverais. ainsi je peux continuer à faire ce que je veux de mon fichier et cela meme pendant l'envoi
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 nov. 2007 à 21:21
Dans la methode Envoi de ta source, il sera peut-etre interessant d'essayer en désinstanciant les objets qui ont servis à l'envoie, une fois l'envoi terminer. C'est à dire les objects message, data, disposition et client.

Voire ensuite de désintancier aussi la classe si elle n'est plus necessaire.

Bien que tout cela devrait etre normalement automatiquement fait à la sortie de la méthode

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
nicogarou Messages postés 3 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 29 novembre 2007
28 nov. 2007 à 21:56
Merci pour vos réponses.

Pour ce qui est de la copie de fichier, je veux bien mais dans le cas où l'utilisateur chioisit de supprimer le fichier d'origine, j'ai toujours un fichier créé dont je ne peux me débarasser.

La solution de Casy me plaît plus, mais c'est peut être parce que je ne sais pas ce que veut dire "désinstancier", et encore moins comment le faire. Je me doute que c'est le "contraire" d'un new, cependant je ne sais pas comment le mettre en pratique.

S'il était possible d'avoir un peu plus d'explications à ce sujet, j'en serais fort reconnaissant. 
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
28 nov. 2007 à 22:07
en te proposant la copie je pensais justement à ce que tu avais écrit :
" Je ne veux pas lancer mon programme dans un .bat  qui effacerait le fichier pièce jointe après exécution.
(en effet, il est possible que l'utilisateur ne veuille pas l'effacer à chaque fois)"
puisque au vu de cette phrase tu savais le détruire apres usage. et comme ce n'était somme toute qu'une copie ..... tu pouvais donc la détruire systématiquement ! maintenant je ne suis pas assez expert pour t'aider plus !
en fait je serais plutot du genre jo la débrouille débutant  qu'expert !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 nov. 2007 à 22:16
C'est effectivement le contraire de New. Le principe est que ça indique au système (framework) que l'objet n'est plus utilisé et qu'il doit etre détruit.

Dans la pratique, cela consiste tout d'abord la methode Close de l'objet quand elle existe. Ensuite, si elle existe, on appelle la methode Dispose de l'objet. Dans le cas contraire, on declare l'objet comme = Nothing.

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
nicogarou Messages postés 3 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 29 novembre 2007
29 nov. 2007 à 08:31
Pour les objets concernés, aucune des methodes close ou dispose n'existe.
J'ai donc tenté avec = nothing.
Mon mail s'envoie toujours mais le programme ne veut toujours pas m'effacer le fichier.

Pour la mise en service (car j'en ai besoin) , je vais utiliser copy avec effacement dans le .bat

Je reste sur le programme pour le plaisir et je vous tiens au courant quand j'ai trouvé une solution.

Merci encore et que la force soit avec vous
0
v_vince_v Messages postés 2 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 6 décembre 2007
6 déc. 2007 à 17:43
dommage de faire des copy avec un dispose() cela aurait tout simplement fonctionné...
(ou avec un garbage collector qui libere tous les objets inutilisé)
0
Rejoignez-nous