У меня есть 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 также удалит вложения.Однако это не помогло.Есть идеи?Действительно, если я попытаюсь удалить файл из Проводника, он также скажет мне, что файл используется.Только после того, как я уничтожу запущенный проект (нажав кнопку STOP в Visual Studio), я смогу удалить файлы.
Ps Я еще не тестировал это на живом сервере ... в настоящее время я тестируюэто на моей рабочей станции, работающей в режиме отладки в Visual Studio 2017, если это имеет значение ...