如何防止附件内容显示在邮件正文中?
我正在开发一个 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:[email protected]");
sbCalendar.AppendLine("ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:MAILTO:[email protected]");
sbCalendar.AppendLine("CLASS:PUBLIC");
sbCalendar.AppendLine("ORGANIZER:MAILTO:[email protected]");
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("[email protected]");
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参数的内容之外,还出现了附件的内容,类似这样:
From:sender 发送时间:2010 年 10 月 5 日星期二下午 4:59 至:某个电子邮件
这里是messageBody内容
方法:请求 开始:V日历 产品编号:-//DP//NET MIMEDIR //版本:1.0 方法:请求 开始:活动 DTSTAMP:20101006T135934Z 开始时间:20101006T135934Z 日期:20101006T135934Z 地点:明斯特德 描述;编码=引用-可打印:我的第一次会议 摘要:学习日历和日程安排 优先级:3 UID:721d9e3c-9010-47f5-9ad0-83c38cb0cbb7 参加者;角色=请求参与者;PARTSTAT=需要操作:MAILTO:someemail 参加者;角色=主席;PARTSTAT=已接受:MAILTO:someemail 类别:公共 组织者:MAILTO:someemail 序列:0 状态:暂定 结束:VENT 结束:V日历
我想删除该文本,只显示 messageBody 参数的内容,并将 vCalendar 文件附加到邮件消息中。 我该怎么做?这是 Outlook 问题还是编码问题?
编辑:我只对在 Microsoft Outlook 中显示消息感兴趣。我已经查看了邮件的来源(在 Outlook 中右键单击 > 查看源代码),我想要删除的文本位于 >
>消息的 html 标签)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到解决方案:
http://msdn.microsoft .com/en-us/library/system.net.mime.dispositiontypenames.attachment.aspx
在附件的构造函数中,我将
"text/calendar"
替换为MediaTypeNames。 Application.Octet
并将DispositionType
设置为Attachment
,而不是Inline
(这可能是默认值)。现在,它为我提供了一条干净的邮件消息,消息正文包含应有的内容和一个有效的 .ics 附件。
Found the solution:
http://msdn.microsoft.com/en-us/library/system.net.mime.dispositiontypenames.attachment.aspx
In the constructor of the Attachment I replaced
"text/calendar"
withMediaTypeNames.Application.Octet
and set theDispositionType
toAttachment
as opposed toInline
which was probably the default value.It now gives me a clean mail message with the body of the message containing what it should and a working .ics attachment.