在 C# 中创建从 byte[] 到 MemoryStream 的多个附件
Creating Multiple Attachments from byte[] to MemoryStream in C#
我正在使用 MVC 开发一个 Web 项目,该项目要求我从组合框中 select 多个值(城市)并返回从 SQL 中提取的数据,并从数据。然后,它通过 MemoryStream 发送到 byte[] 流以附加到电子邮件附件是“.csv”格式。当我 select,比方说,“3”个城市并将其发送到我的操作时,只有第一个附件有数据。另外两个附件都创建好了,但是打开邮件附件是空白的
下面是代码片段:
using (MailMessage message = new MailMessage())
using (SmtpClient client = new SmtpClient())
{
client.Host = "smtp.mymailserver.com";
client.Credentials = new System.Net.NetworkCredential("me@myemail.com", "mypass");
message.From = new MailAddress("maintenance@myemail.com");
message.To.Add(new MailAddress("justme@myemail.com"));
// split up the delimited locations into the list
List<String> listStrLineElements = LocationName.Split(',').ToList();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
foreach (var loc in listStrLineElements)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
writer.Write(EmailAttachmentAdmin(loc, StartDate, EndDate), 0, EmailAttachmentAdmin(loc, StartDate, EndDate).Length); // this just gets my data as a concatenated string.
writer.Flush();
ms.Position = 0;
message.Attachments.Add(new Attachment(ms, loc.ToUpper() + "__" + StartDate.Month.ToString() + "-" + StartDate.Year.ToString() + "-TO-" + EndDate.Month.ToString() + "-" + EndDate.Year.ToString() + ".csv", "text/csv"));
}
message.Subject = "TEST NOTIFICATION: Monthly Maintenance Report Submitted for: " + LocationName;
message.IsBodyHtml = true;
message.Priority = MailPriority.High;
client.Send(message);
}
"EmailAttachmentAdmin" 是一个字符串方法,我调用它来构建数据字符串。我查看了SQL中的数据,确实有数据。另一个测试是 select 只有一个 city/location 以查看附件是否出现在电子邮件中并且是否已成功填充。有人可以跳进来告诉我我做错了什么吗?谢谢
我解决了似乎与 MemoryStream 或 writer 无关的问题。我的问题是我需要 "trim()" 我的 "split" 中“,”之后的空格。所以,当我的代码正在寻找位置时,它找不到。例如,我需要处理位置 "El Paso" 的数据,但如果它是在拆分中第一次出现之后,那么它应该是“El Paso”。我的 switch/case 语句找不到那个事件,所以它将数据处理为 "blank"。
我正在使用 MVC 开发一个 Web 项目,该项目要求我从组合框中 select 多个值(城市)并返回从 SQL 中提取的数据,并从数据。然后,它通过 MemoryStream 发送到 byte[] 流以附加到电子邮件附件是“.csv”格式。当我 select,比方说,“3”个城市并将其发送到我的操作时,只有第一个附件有数据。另外两个附件都创建好了,但是打开邮件附件是空白的
下面是代码片段:
using (MailMessage message = new MailMessage())
using (SmtpClient client = new SmtpClient())
{
client.Host = "smtp.mymailserver.com";
client.Credentials = new System.Net.NetworkCredential("me@myemail.com", "mypass");
message.From = new MailAddress("maintenance@myemail.com");
message.To.Add(new MailAddress("justme@myemail.com"));
// split up the delimited locations into the list
List<String> listStrLineElements = LocationName.Split(',').ToList();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
foreach (var loc in listStrLineElements)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
writer.Write(EmailAttachmentAdmin(loc, StartDate, EndDate), 0, EmailAttachmentAdmin(loc, StartDate, EndDate).Length); // this just gets my data as a concatenated string.
writer.Flush();
ms.Position = 0;
message.Attachments.Add(new Attachment(ms, loc.ToUpper() + "__" + StartDate.Month.ToString() + "-" + StartDate.Year.ToString() + "-TO-" + EndDate.Month.ToString() + "-" + EndDate.Year.ToString() + ".csv", "text/csv"));
}
message.Subject = "TEST NOTIFICATION: Monthly Maintenance Report Submitted for: " + LocationName;
message.IsBodyHtml = true;
message.Priority = MailPriority.High;
client.Send(message);
}
"EmailAttachmentAdmin" 是一个字符串方法,我调用它来构建数据字符串。我查看了SQL中的数据,确实有数据。另一个测试是 select 只有一个 city/location 以查看附件是否出现在电子邮件中并且是否已成功填充。有人可以跳进来告诉我我做错了什么吗?谢谢
我解决了似乎与 MemoryStream 或 writer 无关的问题。我的问题是我需要 "trim()" 我的 "split" 中“,”之后的空格。所以,当我的代码正在寻找位置时,它找不到。例如,我需要处理位置 "El Paso" 的数据,但如果它是在拆分中第一次出现之后,那么它应该是“El Paso”。我的 switch/case 语句找不到那个事件,所以它将数据处理为 "blank"。