我正在开发一个asp.net c#应用程序,它发送带有一个附件的电子邮件。 附件是vCalendar文件。 这是代码:
StringBuilder sbCalendar = new StringBuilder();
DateTime dtStart = eventDate;
DateTime dtEnd = eventDate;
sbCalendar.AppendLine("METHOD: REQUEST");
sbCalendar.AppendLine("BEGIN:VCALENDAR");
sbCalendar.AppendLine("PRODID:-//DP//NET");
sbCalendar.AppendLine("MIMEDIR//ENVERSION:1.0");
sbCalendar.AppendLine("METHOD:REQUEST");
sbCalendar.AppendLine("BEGIN:VEVENT");
sbCalendar.AppendLine("DTSTAMP:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
sbCalendar.AppendLine("DTSTART:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
sbCalendar.AppendLine("DTEND:" + dtEnd.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
sbCalendar.AppendLine("LOCATION:" + eventLocation);
sbCalendar.AppendLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + eventBody);
sbCalendar.AppendLine("SUMMARY:" + eventSubject);
sbCalendar.AppendLine("PRIORITY:3");
sbCalendar.AppendLine("UID:" + Guid.NewGuid().ToString());
sbCalendar.AppendLine("ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION:MAILTO:required@participant.foo");
sbCalendar.AppendLine("ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:MAILTO:chair@foo.foo");
sbCalendar.AppendLine("CLASS:PUBLIC");
sbCalendar.AppendLine("ORGANIZER:MAILTO:organizer@foo.foo");
sbCalendar.AppendLine("SEQUENCE:0");
sbCalendar.AppendLine("STATUS:TENTATIVE");
sbCalendar.AppendLine("END:VEVENT");
sbCalendar.AppendLine("END:VCALENDAR");
byte[] byteArray = Encoding.UTF8.GetBytes(sbCalendar.ToString());
Stream contentStream = new MemoryStream(byteArray);
SmtpClient smtp = new SmtpClient("localhost");
MailMessage memo = new MailMessage();
memo.IsBodyHtml = true;
memo.From = new MailAddress("from@ddress.foo");
foreach (string emailAddress in emailAddresses)
{
memo.To.Add(emailAddress);
}
memo.Body = messageBody;
memo.Subject = messageSubject;
Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", "text/calendar");
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
memo.Attachments.Add(attachment);
smtp.Send(memo);
这可以做并且应该做什么,它发送一个工作(由outlook识别)vcalendar文件。
问题是在邮件正文中,除了messageBody参数的内容外,还会出现附件的内容,如下所示:
来自:发件人 发送时间:2010年10月5日星期二下午4:59 收件人:someemail
messageBody内容
方法:请求 BEGIN:VCALENDAR PRODID: - // // DP NET MIMEDIR // ENVERSION:1.0 方法:REQUEST BEGIN:VEVENT DTSTAMP:20101006T135934Z DTSTART:20101006T135934Z DTEND:20101006T135934Z 位置:旅馆距离Minstead 描述;编码=引用可打印:我的第一次会议 摘要:学习日历和日程安排 优先级:3 UID:721d9e3c-9010-47f5-9ad0-83c38cb0cbb7 ATTENDEE; ROLE = REQ-参与者; PARTSTAT =需要-ACTION:MAILTO:someemail ATTENDEE; ROLE = CHAIR; PARTSTAT = ACCEPTED:MAILTO:someemail 类:public 主办单位:MAILTO:someemail 顺序:0 状态:暂定 END:VEVENT END:VCALENDAR
我想删除该文本,并仅显示我的messageBody参数的内容,并将vCalendar文件添加到邮件消息中。 我怎样才能做到这一点?这是前景问题还是编码问题?
编辑:我只对在Microsoft Outlook中显示消息感兴趣。我查看了邮件的来源(在Outlook中右键单击&gt;查看源代码),我要删除的文本位于<body
&gt; </body
&gt;消息的html标签)
答案 0 :(得分:1)
找到解决方案:
http://msdn.microsoft.com/en-us/library/system.net.mime.dispositiontypenames.attachment.aspx
在附件的构造函数中,我将"text/calendar"
替换为MediaTypeNames.Application.Octet
并将DispositionType
设置为Attachment
而不是Inline
,这可能是默认值
Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", MediaTypeNames.Application.Octet);
attachment.ContentDisposition.DispositionType = DispositionTypeNames.Attachment;
它现在给我一条干净的邮件消息,邮件正文包含它应该包含的内容和一个有效的.ics附件。