我有一个ASP .Net Core 2.2 Web API。 在其中,我有一个前端使用的控制器来发送电子邮件。 它正在使用System.Net.Mail。 我已尽可能简化了代码:
//POST: api/Email
[HttpPost]
public async Task<IActionResult> Post()
{
string attachment1 = Path.Combine(System.AppContext.BaseDirectory, "Attachments", "a.pdf");
string attachment2 = Path.Combine(System.AppContext.BaseDirectory, "Attachments", "b.pdf");
using (MailMessage mailMessage = new MailMessage())
{
mailMessage.Attachments.Add(new Attachment(attachment1));
mailMessage.Attachments.Add(new Attachment(attachment2));
mailMessage.To.Add("someone@somehwere.com");
using (var smtpClient = new SmtpClient("smtp.gmail.com", 578))
{
smtpClient.Credentials = new NetworkCredential("me@gmail.com", "12345");
smtpClient.EnableSsl = true;
await smtpClient.SendMailAsync(mailMessage);
}
}
File.Delete(attachment1);
File.Delete(attachment2);
return Ok();
}
当我尝试删除附件时,出现以下错误:
错误:该进程无法访问文件'C:\ Users \ fabsr \ source \ repos \ PropWorx.API \ PropWorx.API \ bin \ Debug \ netcoreapp2.2 \ Attachments \ a.pdf'正在被另一个进程使用。
我尝试在删除行之前添加它:
foreach (var attachment in mailMessage.Attachments)
attachment.Dispose();
尽管,据我所读,处置MailMessage也将处置附件。但是,它没有帮助。有任何想法吗?确实,如果我尝试从资源管理器中删除文件,它还会告诉我该文件正在使用中。只有在我杀死正在运行的项目(通过单击Visual Studio中的“停止”按钮)之后,才可以删除文件。
P.s。我尚未在实时服务器上对此进行测试...目前,我正在Visual Studio 2017中以调试模式运行的工作站上对此进行测试,如果有所不同...
答案 0 :(得分:1)
在使用过程中添加附件
@matches
答案 1 :(得分:0)
在阅读Daniel的评论后,我将附件从正在运行的文件夹(运行API的文件夹)中取出,现在可以了。即使它们不是我的项目的一部分,甚至没有出现在我的解决方案资源管理器中,Visual Studio似乎都在锁定这些文件。