我正在写一个在内存中创建一个.csv文件并将其作为附件发送的程序。下面的代码成功地发送了一个.csv文件,但它是空的。我肯定我遗漏了一些简单的东西...
MemoryStream memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);
tw.WriteLine("test,hello");
tw.WriteLine("1234,543");
Attachment attachment = new Attachment(memoryStream, new ContentType("text/csv"));
attachment.Name = "test.csv";
var Smtp = new SmtpClient();
Smtp.UseDefaultCredentials = false;
var NetworkCredentials = new NetworkCredential() { UserName = "NOPE@gmail.com", Password = "NO" };
Smtp.Port = 587;
Smtp.EnableSsl = true;
Smtp.Host = "smtp.gmail.com";
Smtp.Credentials = NetworkCredentials;
MailMessage msg = new MailMessage();
msg.From = new MailAddress("NAY@gmail.com");
msg.To.Add("X@gmail.com");
msg.Subject = "subject text";
msg.Body = "Attached is a file.";
msg.Attachments.Add(attachment);
Smtp.Send(msg);
3条答案
按热度按时间qq24tv8q1#
下面的行:
给予人一种他们已经将数据写入
MemoryStream
的印象,但此时数据仍在缓冲区中。为了实际写入数据,您需要刷新数据,这可以通过在上面的代码后添加以下行来完成:另一件需要注意的事情是,一旦数据被写入
MemoryStream
,MemoryStream
的当前指针就位于数据的末尾。因此,要正确地将数据从MemoryStream
复制到Attachment
对象中,请将MemoryStream
指针的位置重置为零(0),这样它就可以从头复制整个数据。下面这行代码将完成这项工作:因此,代码片段的初始部分应类似于:
nlejzf6q2#
我强烈建议您使用using子句
它会自动刷新和关闭流。它的方式更容易和更“保存”的使用。
using-Statement Microsoft explanation
wqlqzqxt3#
我想补充JoeGER 94的回答,如果下面的代码只有一条语句,那么在当前的net版本中不需要{}。
有关详细信息,请查找this question