.net-core - 通过 SmtpClient/System.Net.Mail 发送多个附件后正在使用的文件
问题描述
我有一个 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 按钮)后,我才能删除这些文件。
Ps 我还没有在实时服务器上测试过这个......目前我正在我的工作站上测试这个,在 Visual Studio 2017 的调试模式下运行,如果这有什么不同......
解决方案
使用过程中添加附件
//POST: api/Email
[HttpPost]
public async Task<IActionResult> Post()
{
using (MailMessage mailMessage = new MailMessage())
{
mailMessage.Attachments.Add(new Attachment(@"C:\a.pdf"));
mailMessage.Attachments.Add(new Attachment(@"C:\b.pdf"));
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(@"C:\a.pdf");
File.Delete(@"C:\b.pdf");
return Ok();
}
推荐阅读
- python - 蟒蛇 | 冲突错误 | 弹性搜索 | 运行 delete_by_query() 时
- pine-script - 当 2 条移动平均线相互交叉时绘制标签 — Pinescript v4 (TradingView)
- javascript - 在 2D 汽车游戏中模拟下压力
- r - 如何在不手动输入变量名称的情况下使用 plotly 制作绘图?
- python - 我怎样才能使这个算法更有效地解决谜题?
- dictionary - 初始化和递增嵌套的dict python
- kubernetes - k3s 是否支持 ServiceTopology 功能?
- python - 使用 XML 声明从网页中抓取链接
- javascript - 为什么此表单验证似乎绕过了 `event.preventDefault();`?
- python - 计算特定年份错误中的特定工作日数