Электронная почта и перемещение файлов рекурсивно - PullRequest
0 голосов
/ 08 июня 2009

Я хочу создать скрипт, который рекурсивно отправляет и отправляет файлы по электронной почте для всех файлов в указанной папке.

Итак, для каждого файла: Email File1 переместить файл1 Email File2 Переместить файл2 И т.д.

Теперь, когда я запускаю скрипт ниже, я получаю следующее сообщение: Процесс не может получить доступ к файлу, поскольку он используется другим процессом.

$files = Get-ChildItem 'c:\Test\Out\'

ForEach ($file in $files) 
    {$smtpServer = “mail.dlabs.local”

    $msg = New-Object Net.Mail.MailMessage
    $att = New-Object Net.Mail.Attachment($file.FullName)
    $smtp = New-Object Net.Mail.SmtpClient($smtpServer)

    $msg.From = “test@dlabs.co.uk”
    $msg.To.Add(”test@dlabs.co.uk”)
    $msg.Subject =  ("Test Message "+ $file.Name)
    $msg.Body = “”
    $msg.Attachments.Add($att)

    $smtp.Send($msg)

    Move-Item $moveFile.FullName 'c:\Test\Sent'}

Если бы кто-нибудь мог мне помочь с этим, это было бы очень ценно.

Ответы [ 2 ]

3 голосов
/ 08 июня 2009

Это потому, что дескриптор файла уже открыт для файла, который вы пытаетесь переместить.

Net.Mail.Attachment реализует IDisposable, поэтому для снятия блокировки файла вам следует вызвать $ att.Dispose ()

1 голос
/ 08 июня 2009

Вызовите .Dispose() для объекта сообщения.

Если это не сработает, вы также можете сначала вызвать .Disposse для объекта Attachment, а затем .Dispose() для объекта msg.

(я думаю, вам нужно только вызвать .Dispose() для объекта msg, но я не могу вспомнить ... это было давно, так как я тестировал этот код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...