PDA

View Full Version : [c#] invio di una mail..e poi?


]Rik`[
08-07-2010, 21:30
salve, ho questa domanda da sottoporvi.
ho realizzato un programmino idiota che zippa il contenuto di una cartella scelta dall'utente e la invia in automatico ad un indirizzo email scelto da me.

ora: il file zip "temporaneo" deve essere cancellato dopo l'invio della mail.
al momento ho un codice tipo questo:


// creo il messaggio email con i vari campi
MailMessage message = new MailMessage();
message.To.Add(destinatario);
message.Subject = "backup del giorno " + DateTime.Now.ToString();
message.From = new System.Net.Mail.MailAddress(mittente);
message.Body = "Questo è il backup effettuato in data " + DateTime.Now.ToString();
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(server_posta_uscita);

// preparo l'allegato
string file = "C:\\backup.zip";
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
message.Attachments.Add(data);

// invio il messaggio
smtp.Send(message);


ho provato a spulciare un po' su msdn ma non ho trovato niente di utile, ho trovato la proprietà

message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

ma serve solo a notificare il mittente in caso di invio effettuato, il programma non può sapere quando l'invio è andato a buon fine.
se provo a cancellare il file subito dopo il comando smtp.send(message) ovviamente mi dà errore perché ancora l'invio è in corso e non posso cancellare il file..

..avete idee?

Kralizek
08-07-2010, 21:53
non ti conveniva creare tutto in memoria ed allegare direttamente l'array di byte?

tomminno
08-07-2010, 22:52
Io invece credo che il tuo problema sia il fatto che MailMessage è IDisposable e per l'appunto lo stai usando in modo che MailMessage mantenga aperto un riferimento al file chee quindi non risulta eliminabile.
Prova ad usare:

using (MailMessage message = new MailMessage())
{
...
smtp.Send(message);
}

Fuori dallo using il file dovresti riuscire a cancellarlo.

]Rik`[
09-07-2010, 10:31
grazie tomminno. stasera appena torno a casa provo :)

]Rik`[
09-07-2010, 18:23
risolto, grande :D