如何使用 SendGrid for Outlook 正确附加 ics 文件作为附件

Jer*_*emy 5 c# icalendar sendgrid-api-v3

我正在尝试使用他们为 C# 提供的 SendGrid sdk 将 ics 文件附加到电子邮件中。

这是我的代码:

using SendGrid;
using SendGrid.Helpers.Mail;

----

var client = new SendGridClient(APIKey);
var from = new EmailAddress(email.From);
var to = new EmailAddress(email.To);
            
var msg = MailHelper.CreateSingleEmail(from, to, "test", "test");

var testcontent = "BEGIN:VCALENDAR" + Environment.NewLine;
testcontent += "PRODID:-//Google Inc//Google Calendar 70.9054//EN" + Environment.NewLine;
testcontent += "VERSION:2.0" + Environment.NewLine;
testcontent += "CALSCALE:GREGORIAN" + Environment.NewLine;
testcontent += "METHOD:REQUEST" + Environment.NewLine;
testcontent += "BEGIN:VEVENT" + Environment.NewLine;
testcontent += "DTSTART:20220418T003000Z" + Environment.NewLine;
testcontent += "DTEND:20220418T010000Z" + Environment.NewLine;
testcontent += "DTSTAMP:20220418T001419Z" + Environment.NewLine;
testcontent += "ORGANIZER;CN=Your Name:mailto:yourname@youremail.com" + Environment.NewLine;
testcontent += "UID:2gfanpbtlo35h4dk5qg53c6msa@google.com" + Environment.NewLine;
testcontent += "ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=anotheremail@email.com;X-NUM-GUESTS=0:mailto:anotheremail@email.com" + Environment.NewLine;
testcontent += "ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=Your Name;X-NUM-GUESTS=0:mailto:yourname@youremail.com" + Environment.NewLine;
testcontent += "X-MICROSOFT-CDO-OWNERAPPTID:404715488" + Environment.NewLine;
testcontent += "CREATED:20220418T001418Z" + Environment.NewLine;
testcontent += "DESCRIPTION:test" + Environment.NewLine;
testcontent += "LAST-MODIFIED:20220418T001418Z" + Environment.NewLine;
testcontent += "LOCATION:" + Environment.NewLine;
testcontent += "SEQUENCE:0" + Environment.NewLine;
testcontent += "STATUS:CONFIRMED" + Environment.NewLine;
testcontent += "SUMMARY:test" + Environment.NewLine;
testcontent += "TRANSP:OPAQUE" + Environment.NewLine;
testcontent += "END:VEVENT" + Environment.NewLine;
testcontent += "END:VCALENDAR";

var base64 = Encoding.UTF8.GetBytes(testcontent);
var attachment = new Attachment();
attachment.Content = Convert.ToBase64String(base64); 
attachment.Filename = email.AttachmentName;
attachment.Disposition = "attachment"; 
attachment.Type = "text/calendar;method=request";
msg.AddAttachment(attachment);

var sg_response = client.SendEmailAsync(msg).GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)

此代码可以很好地发送电子邮件,但是我收到作为简单附件而不是“正确解释”的日历邀请附加的 ics 文件。

例如,如果我使用 Gmail 创建日历项目并邀请使用 Outlook 的电子邮件帐户,我会收到如下所示的电子邮件:

在此输入图像描述

现在,如果我使用上面的代码片段发送与 Gmail 生成的完全相同的 ICS 文件,它只会显示为附件。就像下面这样:

在此输入图像描述

很明显,问题不在于 ICS 文件内容本身的格式,而在于我如何将电子邮件传输到 SendGrid 或如何将 ICS 文件附加到电子邮件。

然而,我在 Stack Overflow 上看到的所有内容似乎都表明要确保 MIME/Content-Type 是“文本/日历”,但我觉得我做得正确,而且我做什么似乎并不重要。