通过电子邮件发送csv给我的结果与文件不同

时间:2014-08-08 20:02:25

标签: c# csv

我有一个表格数据,我希望使用电子邮件发送。我可以成功发送和接收电子邮件,这样就没问题了。问题是电子邮件的附件。

我附上了一张csv。 csv是从Stream Writer创建的。当我打开这个文件时,如果我从流中创建了文件,我会得到一个不同的结果。如果在添加流之前将流位置设置为0,则csv文件将只写入21/30行。如果我没有重置该位置,它将不会写入任何行。当我查看我创建的文件时,所有条目似乎正常并且符合预期。

为什么?

using (FileStream memstream = File.Create(@"C:\Users\home\Desktop\" + "test.csv"))
{
    using (StreamWriter writer = new StreamWriter(memstream))
    {
        data.ForEach(line =>
        {
            writer.WriteLine(string.Join(",", line));
        });

        MailMessage message = new MailMessage();
        message.To.Add("home@local.com");
        message.Subject = "Locations sent to home on " + DateTime.Today.AddDays(-1).ToString("MM-dd-yy");
        message.From = new MailAddress("areport@reports.com");

        memstream.Position = 0;
        Attachment attachment = new Attachment(memstream, "report.csv");
        message.Attachments.Add(attachment);

        SmtpClient client = new SmtpClient("outbound@out.com");
        client.Send(message);
    }
}

2 个答案:

答案 0 :(得分:2)

您的问题很可能是因为它在您关闭文件流之前尝试发送电子邮件。在关闭文件流后尝试发送。

答案 1 :(得分:0)

正如@jtimperley在评论中提到的那样,在您发送电子邮件之前,您的StreamWriter没有被刷新,所以某些内容没有被写出来。

Flush上拨打writer应修复此问题。

writer.Flush();
memstream.Position = 0;
Attachment attachment = new Attachment(memstream, "report.csv");
message.Attachments.Add(attachment);