[英]Sending mail via .net core smtpClient: SmtpException / FormatException
[英]Files in use after sending multiple attachments via 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中的“停止”按鈕)之后,才可以刪除文件。
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();
}
閱讀了Daniel的評論后,我將附件從正在運行的文件夾(運行API的文件夾)中取出,現在可以了。 看起來Visual Studio鎖定了這些文件,即使它們不是我的項目的一部分,甚至沒有出現在我的解決方案資源管理器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.