【问题标题】:Closedxml: can't download file and immediately send it via mailClosedxml:无法下载文件并立即通过邮件发送
【发布时间】:2019-03-23 19:10:21
【问题描述】:

我想下载一个 excel 文件并自动将文件发送到邮件地址。下载文件有效,但是当我包含发送邮件的代码时,它会抛出 FileNotFoundException:'找不到文件'C:\Users\User\source\repos\Project\Taijitan\Taijitan\O soto gari.xlsx'。 '。

我注意到下载文件时,它会自动转到我电脑上的“下载”文件夹。当我取消注释邮件代码时,它似乎没有下载,而是在抛出我上面提到的错误之前加载。我尝试使用 Path.GetFullPath(name) 来查找 excel 文件,这样我就不必对任何路径进行硬编码(以防我的任何同事有不同的路径),但它似乎不起作用。

控制器

 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;
    }

生成 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"
            };
        }
    }

邮件发件人

 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);
        }
    }

我正试图找出问题出在哪里以及如何解决这个问题。 我的猜测是它与同步有关(在下载完成之前不要发送邮件)和 Path.GetFullPath() 不在解决方案文件夹之外检查。

编辑 刚刚注意到,当我尝试发送不带附件的电子邮件时,它会发送邮件,但不会下载任何内容,并且选项卡中的加载图标一直在旋转。

EDIT 2 解决了第一个问题,下载方法中return语句的放置导致了循环。 现在我仍然遇到找不到文件错误。

【问题讨论】:

  • 确保在代码中关闭文件。然后在 c: drive 中搜索文件“gari.xlsx”

标签: c# asp.net email closedxml


【解决方案1】:

问题原来是一个愚蠢的错误。文件以“名称”的值保存(file.Name +“comment.xlsx”,但下载/电子邮件发件人正在寻找 file.Name +“.xlsx”(名称中没有“comment”)

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 2013-01-24
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多