Question [Résolu] Envoi de mail et libération d'un fichier

Plus d'informations
il y a 10 ans 11 mois #19356 par Zedd
Bonjour,

J'essaye d'envoyer un fichier en pièce jointe d'un email, puis une fois fait, de bouger ce fichier dans un dossier \"SENT\".
Au moment de l'exécution, j'ai droit à un beau message qui me dit que mon fichier est locké.
\"Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.\"

Jusque la, ca ne me choque pas, je comprend le principe.

Comment rendre mon fichier dispo pour déplacement ?
J'ai bien trouvé la fonction Dispose() mais j'ai un peu du mal à l'utiliser.

Voici comment j'envoi mes fichiers :

[code:1]

$Chemin = \"D:\CVEMEG\\"
$CheminSource = \"\\172.16.0.1\qdls\CVEMEG\\"
$CheminFait = \"\\172.16.0.1\qdls\CVEMEG\SENT\\"
$Journal = $Chemin + \"Journal.txt\"

#####Informations relative à l'envoi de mail
$ServeurSMTP = \"smtp.xxxxxx\"
$SMTPAuthUsername = \"no-reply@xxxxxx\"
$expediteur = \"no-reply@xxxxxx\"
$Port = 25
$SMTPAuthPassword = \"xxxxxx\"
$SMTPClient = New-Object System.Net.Mail.smtpClient($ServeurSMTP,$Port)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword)

cls
D:
cd $Chemin

#Je liste les fichiers présents
$Fichiers = Get-ChildItem $CheminSource | Where-Object {!$_.PSIsContainer}

#Destinataires des emails
$Destinataire = \"xxxxxxxx@xxxxxxxx\"



Foreach ($File in $Fichiers){
$CheminFichierSource = $File.fullname
$NomFichierSource = $File.name
$PieceJointe = $CheminFait + $NomFichierSource

$objet = \"Envoi du fichier $NomFichierSource du \" + [System.DateTime]::Now
$CorpsDuMail = \"Bonjour, `n
Vous trouverez en pièce jointe votre fichier $NomFichierSource.`n `n
Cordialement, `n
L'équipe informatique.\"

$Attachment = New-Object System.Net.Mail.Attachment –ArgumentList $CheminFichierSource
$MailMessage = New-Object System.Net.Mail.MailMessage
$Recipient = New-Object System.Net.Mail.MailAddress($Destinataire, \"$Destinataire\"«»)
$Sender = New-Object System.Net.Mail.MailAddress($expediteur, \"$expediteur\"«»)
$MailMessage.Sender = $Sender
$MailMessage.From = $Sender
$MailMessage.Subject = $Objet
$MailMessage.To.add($Recipient)
$MailMessage.Body = \"$CorpsDuMail\"
if ($Attachment -ne $null) {
$MailMessage.attachments.add($Attachment)
}
$SMTPClient.Send($MailMessage)

move $CheminFichierSource $CheminFait

}

[/code:1]

Cdt,

zedd<br><br>Message édité par: Arnaud, à: 9/04/15 10:45

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19369 par Arnaud Petitjean
Salut !

Je ne sais pas pourquoi le fichier est toujours verrouillé après ton envoi par mail. Cependant, pourquoi n'essaierais tu pas la commande Send-MailMessage ?

D'un ton script serait plus court et moins lisible, et de deux peut-être que ça fonctionnera mieux ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19372 par Zedd
Salut,

Ben tout simplement parce que je ne connais pas la fonction Send-MailMessage :)
Je vais me renseigner la dessus, voir si ça colle à mes besoins.
Tant que je peux envoyer du mail avec X destinataires (directs OU en copie OU en copie cachée), que je peux envoyer X pièces jointes dans le même email, et qu'il y a la double notion d'expéditeur (From ET Sender), ça roule :) Sans parler de mon certificat maison du SMTP de la société..

Mais à première vue, ça peut faire tout ça.

Cdt,

Zedd

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19374 par Arnaud Petitjean
Oui oui cette commande peut tout faire ;) !

Tiens nous au courant si ça règle ton souci.

Arnaud
PS : Zed is dead baby, Zed is dead... :whistle: (citation de l'un de mes films préféré)

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19387 par Laurent Dardenne
Salut,
Zedd écrit:

J'ai bien trouvé la fonction Dispose() mais j'ai un peu du mal à l'utiliser.

Un exemple dans ce tutoriel .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19440 par Arnaud Petitjean
C'est fou ces gens qui viennent poser leurs questions mais qui ne prennent même pas la peine de revenir pour nous dire si ça a marché ou pas... :pinch: :angry:

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.109 secondes
Propulsé par Kunena