ENVIAR E-MAIL
Estou com a seguinte rotina?
conta todos os arquivos da pasta Enviar e vai incluindo de 1 a 1 no email
For cont = 1 To CStr(contArquivos.Count)
attachment = New System.Net.Mail.Attachment([Ô]Enviar\[Ô] & cont & [Ô].jpg[Ô])
Mail.Attachments.Add(attachment)
Next
[ô]chama a função enviar email com as imagens acima anexas ao email.
SMTP.Send(Mail)
Aqui esta o problema: tento apagar os arquivos da pasta apos enviar porem da erro pois os arquivos ainda estão sendo usados no envio.
Dim contArquivos1 = My.Computer.FileSystem.GetFiles([Ô]Enviar\[Ô]) [ô][ô]conta o numero de arquivos em uma pasta
Dim cont1 As Double
For cont1 = 1 To CStr(contArquivos1.Count)
My.Computer.FileSystem.DeleteFile([Ô]Enviar\[Ô] & cont1 & [Ô].jpg[Ô])
Next
Pensei em um timer para apagar os arquivos apos determinado tempo, mais não posso pois terão novos arquivos na pasta os quais não posso apagar, então a unica solução que busco é como saber se a função SMTP.Send(Mail) já acabou de ser executada, ou seja se os emails já foram enviados.
Software para monitoramento de computadores empresariais.
conta todos os arquivos da pasta Enviar e vai incluindo de 1 a 1 no email
For cont = 1 To CStr(contArquivos.Count)
attachment = New System.Net.Mail.Attachment([Ô]Enviar\[Ô] & cont & [Ô].jpg[Ô])
Mail.Attachments.Add(attachment)
Next
[ô]chama a função enviar email com as imagens acima anexas ao email.
SMTP.Send(Mail)
Aqui esta o problema: tento apagar os arquivos da pasta apos enviar porem da erro pois os arquivos ainda estão sendo usados no envio.
Dim contArquivos1 = My.Computer.FileSystem.GetFiles([Ô]Enviar\[Ô]) [ô][ô]conta o numero de arquivos em uma pasta
Dim cont1 As Double
For cont1 = 1 To CStr(contArquivos1.Count)
My.Computer.FileSystem.DeleteFile([Ô]Enviar\[Ô] & cont1 & [Ô].jpg[Ô])
Next
Pensei em um timer para apagar os arquivos apos determinado tempo, mais não posso pois terão novos arquivos na pasta os quais não posso apagar, então a unica solução que busco é como saber se a função SMTP.Send(Mail) já acabou de ser executada, ou seja se os emails já foram enviados.
Software para monitoramento de computadores empresariais.
Aà está mais um caso clássico da falta de entendimento da OOP. Você está usando um objeto SmtpClient, você precisa que ao terminar de enviar o e-mail, os arquivos que foram anexados sejam apagados. E ao invés de recorrer ao objeto usado(o SmtpClient), você pensa em um timer. Acontece que ele possui um evento [Ô]SendComplete[Ô] que é justamente o que você quer, um evento que é disparado ao terminar de enviar o e-mail. Tudo que você precisa fazer é criar um delegate para esse evento.
E adicionar o método [Ô]EmailEnviado[Ô], onde você vai fazer a deleção dos arquivos:
O único [Ô]porém[Ô] é que ao invés de utilizar o método sÃncrono de envio, você vai usar o método assÃncrono:
Se tiver dúvidas, aqui está a documentação, que contém um exemplo disso tudo. Mas por favor, leia toda ela, isso vai pode várias dúvidas que você possa ter, não simplesmente copie e cole código, isso é péssimo para seu aprendizado.
..... seu código
......Antes do evento de enviar, adicione o delegate:
AddHandler SMTP.SendCompleted, AddressOf EmailEnviado
E adicionar o método [Ô]EmailEnviado[Ô], onde você vai fazer a deleção dos arquivos:
Private Shared Sub EmailEnviado(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
O único [Ô]porém[Ô] é que ao invés de utilizar o método sÃncrono de envio, você vai usar o método assÃncrono:
Dim userState As String = [Ô]Mensagem de teste[Ô]
client.SendAsync(Mail, userState)
Se tiver dúvidas, aqui está a documentação, que contém um exemplo disso tudo. Mas por favor, leia toda ela, isso vai pode várias dúvidas que você possa ter, não simplesmente copie e cole código, isso é péssimo para seu aprendizado.
Isso que o amigo KerpLunk falou é correto e é o modo mais correto pra fazer
Só que o assunto delegates, invoke e thread podem ser um pouco complicados dependendo do grau de conhecimento de cada um
Eu quando tinha esse tipo de dificuldade, antes de dominar bem o assunto delegate, copiava os arquivos para uma pasta temporária e enviava os e-mails a partir daÃ, elemininado assim o problema de estarem em uso na pasta principal....
Verifique essa solução... poderá te ajudar provisoriamente... e funciona certinho
Só que o assunto delegates, invoke e thread podem ser um pouco complicados dependendo do grau de conhecimento de cada um
Eu quando tinha esse tipo de dificuldade, antes de dominar bem o assunto delegate, copiava os arquivos para uma pasta temporária e enviava os e-mails a partir daÃ, elemininado assim o problema de estarem em uso na pasta principal....
Verifique essa solução... poderá te ajudar provisoriamente... e funciona certinho
Faça seu login para responder