我想要从C#发送一封电子邮件,其中包含vCalendar和HTML正文部分。
我创建了MailMessage
,并设置了2个备用视图:
AlternateView avCal = new AlternateView("VCALENDAR:...", null, "text/calendar");
AlternateView avHtml = new AlternateView("<p>some html</p>", null, "text/html");
mailMessage.AlternateViews.Add(avCal);
mailMessage.AlternateViews.Add(avHtml);
这会向我发送Content-Type
multipart/alternative
的消息。
这将在我的网络邮件上显示日历约会和HTML部分,但不显示Outlook。
如何使用不同的内容类型显示两个不同的部分?我正在寻找的更像是Content-Type: multipart/mixed
,其中“替代视图”出现。
修改
当我使用@Chris Haas的方法时,我会接近,但标记不会呈现。它似乎忽略了MailMessage.IsBodyHtml = true
不确定如何在Outlook中查看原始内容但只是标题...
Return-Path: <*****@****.com>
X-Footer: ZWJyaWRnZS5jb20=
Received: from localhost ([127.0.0.1])
by mail.foo.com
for *****@****.com;
Wed, 2 Jan 2013 17:20:14 -0500
MIME-Version: 1.0
From: "George Washington" <*****@****.com>
To: "George Washington" <*****@****.com>
Date: 2 Jan 2013 17:29:14 -0500
Subject: To-Do: test test - test
Content-Type: multipart/mixed;
boundary=--boundary_0_4fbc08b4-2198-45b1-bf2e-9659179aad84
答案 0 :(得分:3)
尝试将Attachment
属性设置为Inline
的{{1}}发送VCALENDAR:
true
修改强>
好的,我已将代码更新为不依赖于文件,因此我们使用完全相同的ICS文件。如果需要,更新顶部的字符串和using (MailMessage mm = new MailMessage("...", "...", "Subject here", "Body here")) //Pick whatever constructor you want
{
using (Attachment a = new Attachment("c:\\test.ics", "text/calendar")) //Either load from disk or use a MemoryStream bound to the bytes of a String
{
a.Name = "meeting.ics"; //Filename, possibly not required
a.ContentDisposition.Inline = true; //Mark as inline
mm.Attachments.Add(a); //Add it to the message
using (SmtpClient s = new SmtpClient("...")) //Send using normal
{
s.Send(mm);
}
}
}
,否则将完全保留原样。 ICS来自this page的中间。
SmtpClient
答案 1 :(得分:2)
我相信您必须将您的vCalendear(* .vcs)或iCalendar(* .ics)文件作为Outlook的附件发送,以了解如何处理它。
然后,收件人需要在Outlook中打开电子邮件,然后双击附件将其导入Outlook / Exchange日历。
答案 2 :(得分:1)
我有同样的问题;我无法在不显示标签的情况下获得显示HTML的邀请。我能用类似的东西解决问题(变量f包含所有“BEGIN:VCALENDAR”的东西):
System.Net.Mime.ContentType calendarType = new System.Net.Mime.ContentType("text/calendar");
AlternateView ICSview = AlternateView.CreateAlternateViewFromString(f.ToString(), calendarType);
AlternateView HTMLV = AlternateView.CreateAlternateViewFromString(body, new System.Net.Mime.ContentType("text/html"));
MailMessage email = new MailMessage("from@example.com", "to@example.com", "subject", "body");
email.AlternateViews.Add(ICSview);
email.AlternateViews.Add(HTMLV);
SmtpClient client = new SmtpClient();
client.Send(email);
我确信代码可以整理......
答案 3 :(得分:1)
我遇到了同样的问题。
尝试将两个AlternateViews添加到MailMessage,一个包含内容类型文本/日历,一个包含ics文件,一个包含内容类型text / html,包含电子邮件正文。
为我工作:)
答案 4 :(得分:0)
这些建议都不适合我。
最近,我到目前为止已经使用&#34; text / calendar&#34;附加了一个MemoryStream。作为MIME类型。 但是,GMail无法识别此文件,因为它不显示.ICS文件中的摘要,也不允许我“添加到日历”。
但是,当我向GMail上的同事(或其他人)转发完全相同的电子邮件时,GMail会显示.ICS内容。我在这里试图测试不同的解决方案。