請原諒我對MailMessage和SmtpClient類的新意。我已經構建了一些基本上可行的東西,但在準備發送附件時,我有時會將附件複製到臨時文件位置(Path.GetTempPath() + @"\" + timestampWithFF
),因爲它們有時必須壓縮才能發送。發生這種情況時,我想確保在發送後刪除那些文件(特別是因爲任何事情會相對較大)。MailMessage發送後刪除附件,如果在Path.GetTempPath()
雙重問題: 1.我應該不打擾清理文件,因爲操作系統(win7)會做得很好嗎? 2.如何獲得附件中的HDD位置client.SendCompleted
?
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();
};
我看我可以使用a.Dispose()
,但我沒有任何想法它做什麼...我懷疑這是處置的對象(其中msg.Dispose
會做下一個反正),但將在保留原文件HDD。
我必須分別發送附件的文件路徑嗎? client.SendCompleted()
行在: sendMailAsync(SmtpClient client, MailMessage msg)
方法。我可以將其更改爲: sendMailAsync(SmtpClient client, MailMessage msg, List<string> attachments)
,這增加了SendCompleted()
,但感覺有點笨重:
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); }
}
}
嗯...這似乎如此接近正確的,但我發現從選擇零個元素。我認爲在Select(fs => fs.Name)之後需要一個.ToArray()(或類似的),因爲否則fileattachments不會在msg.Dispose之後被評估,所以沒有什麼可以循環。 – Keith
對不起我的壞。我從頭腦中寫下來,回憶起我過去的那些日子,完全錯過了'.ToArray();'。感謝編輯! :)希望在添加'ToArray'之後,你就能解決這個問題 –