C# Closedxml:can';t下载文件并立即通过邮件发送
我想下载一个excel文件,并自动将该文件发送到邮箱。下载该文件是可行的,但当我包含发送邮件的代码时,它抛出一个FileNotFoundException:“找不到文件”C:\Users\User\source\repos\Project\Taijitan\Taijitan\O soto gari.xlsx“ 我注意到,当下载文件时,它会自动转到我电脑上的下载文件夹。当我取消注释邮件代码时,它似乎不会下载,而是在抛出我上面提到的错误之前加载。我尝试使用Path.GetFullPath(name)查找excel文件,这样我就不必硬编码任何路径(以防我的同事有不同的路径),但它似乎不起作用 控制器C# Closedxml:can';t下载文件并立即通过邮件发送,c#,asp.net,email,closedxml,C#,Asp.net,Email,Closedxml,我想下载一个excel文件,并自动将该文件发送到邮箱。下载该文件是可行的,但当我包含发送邮件的代码时,它抛出一个FileNotFoundException:“找不到文件”C:\Users\User\source\repos\Project\Taijitan\Taijitan\O soto gari.xlsx“ 我注意到,当下载文件时,它会自动转到我电脑上的下载文件夹。当我取消注释邮件代码时,它似乎不会下载,而是在抛出我上面提到的错误之前加载。我尝试使用Path.GetFullPath(name)
public IActionResult GenerateList(int id)
{
Lesson lesson = _lessonRepository.GetBy(id);
var download = lesson.GetCommentsList();
string file = lesson.Name + ".xlsx";
MailSender.SendListMail(lesson.Name, file);
return download;
}
public static void SendListMail(string list, string file)
{
MailAddress Sender = new MailAddress("SenderEmail@gmail.com", "CommentsSender");
MailAddress Receiver = new MailAddress("ReceiverEmail@gmail.com", "Comments inbox");
const string SenderPassword = "password123";
string Attachment = Path.GetFullPath(file);
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(Sender.Address, SenderPassword),
Timeout = 30000
};
using (MailMessage message = new MailMessage(Sender, Receiver)
{
Subject = list,
Body = "List in attachment",
Attachments = {new Attachment(Attachment)}
})
{
smtp.Send(message);
}
}
生成excel+下载
public List<Comment> Comments { get; set; }
public IActionResult GetCommentsList()
{
List<string> list = new List<string>();
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Comments");
foreach (var comment in Comments)
{
list.Add(comment.Body);
}
string name = Name + "comment";
ws.Cell(1, 1).Value = name;
ws.Range(1, 1, 1, 1).AddToNamed("Titles");
var CommentsRange = ws.Cell(2, 1).InsertData(list.AsEnumerable());
var titlesStyle = wb.Style;
titlesStyle.Font.Bold = true;
titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
titlesStyle.Fill.BackgroundColor = XLColor.Blue;
titlesStyle.Font.FontColor = XLColor.White;
wb.NamedRanges.NamedRange("Titles").Ranges.Style = titlesStyle;
ws.Columns().AdjustToContents();
wb.SaveAs(name + ".xlsx");
using (var stream = new MemoryStream())
{
wb.SaveAs(stream);
stream.Flush();
return new FileContentResult(stream.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = name + ".xlsx"
};
}
}
我正试图找出哪里出了问题,以及如何解决这个问题。
我猜这与同步(在下载完成之前不要发送邮件)和Path.GetFullPath()没有在solutionfolder之外进行检查有关
编辑
我注意到,当我尝试发送一封没有附件的电子邮件时,它会发送邮件,但不会下载任何内容,并且选项卡中的加载图标会一直旋转
edit2解决了第一个问题,在下载方法中放置return语句导致循环。
现在我仍然有找不到文件的错误。问题原来是一个愚蠢的错误。文件以“name”(File.name+“comment.xlsx”)的值保存,但下载/电子邮件发件人正在查找File.name+“.xlsx”(名称中没有“comment”)确保以代码关闭文件。然后在c:驱动器中搜索文件“gari.xlsx”