我正在控制器中创建一个ics文件。使用asp.net core 2.0 mvc。现在,我已经完成了内容和所有工作,可以将ics文件作为邮件附件发送。但是我不想在我的PC上本地创建文件,我想使用memorystream或没有物理路径的东西。
这是我创建ics内容的方式:
string schLocation = "Nord 1";
string schSubject = "Badge-Austausch";
string schDescription = "Termin zum Austauschen des Badges";
System.DateTime schBeginDate = Convert.ToDateTime(DateOwnRegister);
System.DateTime schEndDate = Convert.ToDateTime(schBeginDate.AddMinutes(30));
string[] contents = { "BEGIN:VCALENDAR",
"PRODID:-//Flo Inc.//FloSoft//EN",
"BEGIN:VEVENT",
"DTSTART:" + schBeginDate.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" + schEndDate.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"LOCATION:" + schLocation,
"DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + schDescription,
"SUMMARY:" + schSubject, "PRIORITY:3",
"END:VEVENT", "END:VCALENDAR"
这就是我一直试图使用内存流的方式:
char[] charArray = contents.SelectMany(x => x.ToCharArray()).ToArray();
byte[] byteArray = Encoding.UTF8.GetBytes(charArray);
System.IO.MemoryStream mStream = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(charArray));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
writer.Write(byteArray);
这就是我将其作为附件发送的方式。发送工作,但我无法在Outlook中打开文件。因此它不能用作日历邀请;
System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar");
System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms, contype);
attach.ContentDisposition.FileName = "myFile.ics";
msg.Attachments.Add(attach);
sc.Send(msg);
对于我如何使它起作用的任何想法或解决方案感到高兴。正如我说的那样,当我从本地数据发送文件时,“内容”起作用了,但是没有本地路径的发送还没有起作用。
答案 0 :(得分:0)
使用字符串生成器使其工作。
StringBuilder sb = new StringBuilder();
foreach (var line in contents)
{
sb.AppendLine(line);
}
var calendarBytes = Encoding.UTF8.GetBytes(sb.ToString());
MemoryStream memorystream = new MemoryStream(calendarBytes);
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(memorystream, "event.ics", "text/calendar");```