我有一个方法,该方法可以按确定的路径保存屏幕截图,然后生成电子邮件,并在屏幕上附加屏幕截图。据我了解,发送之后-正在创建使用附件文件的特殊线程,因此在该线程正常工作时无法删除它。因此,我需要知道何时可以访问该文件以进行删除。
这是我的代码:
-配置smtp
private SmtpClient CreateSMTP()
{
var smtp = new SmtpClient("gate");
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("notifications@****.com", "3eCMCQxFde");
smtp.Port = 25;
smtp.EnableSsl = false;
return smtp;
}
-制作消息
public MailMessage MakeMessage(bool screenshotFlag)
{
MailAddress from = new MailAddress("notifications@****.com", Name);
MailAddress to = new MailAddress("****@****.com");
MailMessage message = new MailMessage(from, to);
message.Subject = Subject == string.Empty ? string.Empty : Subject;
message.Body = MessageText;
message.Body = GenerateLogAndExceptionInfo(message.Body);
message.BodyEncoding = Encoding.Unicode;
message.ReplyTo = new MailAddress(Mail);
if (screenshotFlag)
{
CreateScreenshot();
message.Attachments.Add(new Attachment(MailHelper.FeedBackScreenShotPath));
}
return message;
}
-发送电子邮件
public void SendMessage()
{
using (SmtpClient smtp = CreateSMTP())
{
smtp.Send(MakeMessage(SendWithScreenshot));
}
}
答案 0 :(得分:2)
这些方法在发送消息时会阻塞。
因此,在传输消息时,该方法将阻塞。因此,在完成该方法并处置了消息实例之后,可以删除该文件。
当然,它仍然可以锁定文件。这就是为什么我要说您应该首先处理SmtpClient
,然后尝试删除文件的原因(在using
块之后也要这样做)。那就没事了。
答案 1 :(得分:0)
我已经看到文件是由消息对象保存的,而不是由smtp对象保存的,所以我也为消息添加了代码块。
感谢所有人)