Utilisation de SmtpClient

Signaler
Messages postés
3
Date d'inscription
jeudi 13 septembre 2007
Statut
Membre
Dernière intervention
29 novembre 2007
-
Messages postés
2
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
6 décembre 2007
-
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

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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
Messages postés
3
Date d'inscription
jeudi 13 septembre 2007
Statut
Membre
Dernière intervention
29 novembre 2007

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. 
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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 !
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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
Messages postés
3
Date d'inscription
jeudi 13 septembre 2007
Statut
Membre
Dernière intervention
29 novembre 2007

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
Messages postés
2
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
6 décembre 2007

dommage de faire des copy avec un dispose() cela aurait tout simplement fonctionné...
(ou avec un garbage collector qui libere tous les objets inutilisé)