.net - 如何像 Outlook 在 .NET 中一样发送 iCalendar
问题描述
目前,我可以使用 MailKit 发送一封电子邮件,其中包含一个 ics 文件作为使用 iCal.net 创建的附件。这可行,但我只能将其视为附件。当我在 Outlook 中手动创建约会时,我会得到精美的 UI。
当我以编程方式创建它时,我会得到它。
我想以编程方式创建精美的 UI。它似乎与 ICS 无关,因为我通过 Outlook 手动创建了一个 ICS 文件。并使用该 ics 文件通过我的应用程序发送,但仍然没有成功。
static void Main(string[] args)
{
string serializedCalendar = CreateRecurringEvent();
File.WriteAllText(@"F:\test.ics", serializedCalendar);
SendMail();
}
private static void SendMail()
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Joey Tribbiani", "joey@tribbiani.com"));
message.To.Add(new MailboxAddress("Monica Geller", "monica@geller.com"));
message.To.Add(new MailboxAddress("Chandler Muriel Bing", "chandler@murielbing.com"));
message.Subject = "How you doin?";
var builder = new BodyBuilder
{
TextBody = @"<bodytext>"
};
builder.Attachments.Add(@"F:\test.ics");
message.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
client.Connect("<host>", 235236);
client.Authenticate("<username>", "<password>");
client.Send(message);
client.Disconnect(true);
}
}
private static string CreateRecurringEvent()
{
DateTime now = DateTime.Now;
DateTime later = now.AddHours(1);
var rrule = new RecurrencePattern(FrequencyType.Daily, 1) { Count = 5 };
var e = new CalendarEvent
{
Start = new CalDateTime(now),
End = new CalDateTime(later),
RecurrenceRules = new List<RecurrencePattern> { rrule }
};
var calendar = new Calendar();
calendar.Events.Add(e);
var serializer = new CalendarSerializer();
return serializer.SerializeToString(calendar);
}
}
解决方案
下面介绍如何创建适用于 Outlook 的会议请求:
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Joey Tribbiani", "joey@tribbiani.com"));
message.To.Add(new MailboxAddress("Monica Geller", "monica@geller.com"));
message.To.Add(new MailboxAddress("Chandler Muriel Bing", "chandler@murielbing.com"));
message.Subject = "How you doin?";
var mixed = new Multipart ("mixed");
mixed.Add (new TextPart ("plain") {
ContentTransferEncoding = ContentEncoding.QuotedPrintable,
Text = "Would you like to join this meeting?"
});
var ical = new TextPart ("calendar") {
ContentTransferEncoding = ContentEncoding.Base64,
Text = CreateRecurringEvent (),
};
ical.ContentType.Parameters.Add ("method", "REQUEST");
mixed.Add (ical);
message.Body = mixed;
推荐阅读
- shell - Makefile 评估问题 - foreach 列表在执行前不评估
- angular - 当我的数据更改时,我的搜索管道过滤器不会更新我的模板
- python-3.x - OpenCV 的 VideoWriter 可以在单独的进程中写入吗?
- docker - 将容器推送到 Azure 容器注册表时资源访问被拒绝
- python - 如何在 Python 中加载 Statsmodels 数据集?
- arrays - 为数组的每个值运行 6 个月总和
- javascript - 尝试 .get() Express 中的另一个文件时出现 500 错误
- c# - 在 ASP.NET Web API 2 中,ByteRangeStreamContent 在与来自 Azure 存储的流一起使用时返回不正确的数据
- python - django 中的默认用户(哨兵值)
- swift - 如何从情节提要中以编程方式实例化 UITabBarController?