Verzeihen Sie meine Neuheit in den Klassen MailMessage und SmtpClient. Ich habe etwas gebaut, das grundsätzlich funktioniert, aber wenn ich mich darauf vorbereite, die Anhänge zu senden, kopiere ich die Anhänge manchmal in den Speicherort der temporären Dateien (Path.GetTempPath() + @"\" + timestampWithFF
), weil sie manchmal zum Versenden gezippt werden müssen. Wenn dies passiert, möchte ich sicherstellen, dass ich die Dateien nach dem Senden lösche (vor allem, weil alles dort relativ groß sein wird).MailMessage Löschen Sie Anhänge nach dem Senden, wenn in Path.GetTempPath()
Zweifache Frage: 1. sollte ich nicht mit der Bereinigung der Dateien kümmern, weil das Betriebssystem (Win7) einen guten Job machen wird? 2. Wie kann ich die Festplattenposition der Attachments in client.SendCompleted
bekommen?
client.SendCompleted += (s, e) =>
{
client.Dispose();
foreach(Attachment a in msg.Attachments)
{
// want to actually delete the file from the HDD if it's in Path.GetTempPath();
}
msg.Dispose();
};
Ich sehe, ich a.Dispose()
verwenden könnte, aber ich habe keine Ahnung, was es tut ... Ich vermute, dass es von dem Objekt angeordnet wird (was msg.Dispose
sowieso als nächstes tun würde), würde aber die Dateien führen auf die Festplatte.
muss ich die Dateipfade der Anhänge separat senden? Die client.SendCompleted()
Zeile ist in: sendMailAsync(SmtpClient client, MailMessage msg)
Methode. Ich konnte dies ändern: sendMailAsync(SmtpClient client, MailMessage msg, List<string> attachments)
und fügen Sie diese in die SendCompleted()
, aber es fühlt sich ein bisschen klobig:
string tempDir = Path.GetTempPath();
foreach(string f in attachments)
{
if(f.Contains(tempDir)) // want to actually delete the file from the HDD if it's in Path.GetTempPath();
{
if (File.Exists(f)) { File.Delete(f); }
}
}
hmmm ... dies zu Recht so nah scheint, aber ich bin immer Null-Elemente aus dem Select. Ich denke, es erforderte ein .ToArray() (oder ähnlich) nach Auswahl (fs => fs.Name), weil ansonsten Dateiattachments nicht nach msg.Dispose ausgewertet wird, also gibt es nichts zu durchlaufen. – Keith
Sorry mein schlechtes. Ich schrieb es aus meinem Kopf und erinnerte mich an die alten Tage, an denen ich daran gearbeitet hatte und total vermisst '.ToArray();'. Danke für die Bearbeitung! :) hoffe, das hat sich nach dem Hinzufügen von 'ToArray' bewährt –