【问题标题】:Unable to create and send dynamic CSV file as attachment over mail无法通过邮件创建和发送动态 CSV 文件作为附件
【发布时间】:2017-07-05 02:50:07
【问题描述】:

我正在尝试创建动态 csv 文件并将其作为邮件附件发送,但它不起作用。我可以发送带有附件的邮件,但文件是空的。以下是我的代码:

var notProcessedRecords = FileFTPData.Where(x => x.LastName.StartsWith("9999")).ToList();

      string loggedInUserName = "Administrator";

      try
      {
      MemoryStream stream = new MemoryStream();
      TextWriter writer = new StreamWriter(stream, Encoding.Default);
      StringBuilder sb = new StringBuilder();
      sb.AppendFormat(string.Format("{0}, {1}, {2}, {3}, {4}, {5} ", "FIRSTNAME", "LASTNAME", "USERID", "COMPANYNAME", "EMAIL", "PHONE"));

      foreach (var item in notProcessedRecords)
      {
          sb.AppendLine();
          sb.AppendFormat(string.Format("{0}, {1}, {2}, {3}, {4}, {5} ", item.FirstName, item.LastName, item.UserId, item.CompanyName, item.Email, item.Phone));
      }
      writer.WriteLine(sb);

      MailMessage mail = new MailMessage();
      SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
      mail.From = new MailAddress("******@gmail.com");
      mail.To.Add("*******@yahoo.com");
      mail.Subject = "FTP file processing status";
      mail.Body = "<div>Hello " + loggedInUserName + ", </br></br> Following item are restricted from processing, due to some errors. Please check Process description for the same. </br></br>  From, </br>Streben Support </div>";
      mail.IsBodyHtml = true;

      Attachment attachment = new Attachment(stream, new ContentType("text/csv"));
      attachment.Name = "test.csv";
      mail.Attachments.Add(attachment);

      SmtpServer.Port = 587;
      SmtpServer.Credentials = new System.Net.NetworkCredential("******@gmail.com", "******");
      SmtpServer.EnableSsl = true;

      SmtpServer.Send(mail);

      }
      catch(Exception ex)
      {
      }

谁能帮我解决这个问题?

【问题讨论】:

    标签: c# email csv stream streamwriter


    【解决方案1】:

    当您刚刚完成对流的写入时,Position 属性将设置为流的末尾。此外,可能仍有一些缓存在写入器中的数据尚未刷新到流中。因此,当从流中创建附件时,它看起来是空的。要解决这个问题:

    // Done writing here //
    
    writer.Flush();
    stream.Position = 0;
    
    // Create attachment here //
    

    【讨论】:

    • 我设置了stream.position = 0,附件中的文件仍然是空的。
    • 你在设置位置之前冲洗了吗?
    • 没有。在这些行之后我确实刷新了: Attachment attachment = new Attachment(stream, new ContentType("text/csv"));附件.Name = "test.csv"; mail.Attachments.Add(附件); writer.Flush();
    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多