【发布时间】:2019-07-05 22:19:13
【问题描述】:
我有一个 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 中的 STOP 按钮)后,我才能删除文件。
附:我还没有在实时服务器上测试过这个……目前我正在我的工作站上测试这个,在 Visual Studio 2017 的调试模式下运行,如果这有什么不同的话……
【问题讨论】:
标签: .net-core asp.net-core-webapi smtpclient mailmessage system.net.mail