我們有一個C#控制檯應用程序,它會爲本地事件發送註冊確認電子郵件。 我只是添加了邏輯來附加.ICS日曆約會提醒到電子郵件,指定UTC時間。即使指定UTC時間,會議提醒(.ICS)電子郵件附件也不會考慮時區
當用戶收到電子郵件並將約會添加到他/她的日曆中時,它應該適應當地PC的環境時間,但不會這樣做。例如,在我的測試中,該活動是在聖地亞哥的上午11:30 - 下午1:00。 當我(在中央時區)打開電子郵件附件並添加到日曆時,它應該在下午1點30分到下午3點結束,但仍在11:30 - 1:00 PM之間。
我見過http://erics-notes.blogspot.com/2013/05/fixing-ics-time-zone.html建議添加VTIMEZONE塊和時區參考DTSTART & DTEND(如「DTSTART; TZID =美洲/洛杉磯:20130602T130000」) 但在例如他不使用UTC時間。
The.ICS附件文件包含此;抱歉額外的換行符,但是當它們不在時,它會一起運行。指定 注意DTSTART & DTEND「Z」通用時代:
BEGIN:VCALENDAR
PRODID:-//Save to my Calendar
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20170622T163000Z
DTEND:20170622T180000Z
DTSTAMP:20170718T134127Z
UID:6f59cf3b-99b5-4935-8f7c-3cb4c2e7a53f
CREATED:20170718T134127Z
LAST-MODIFIED:20170718T134127Z
X-ALT-DESC;FMTTYPE=text/html:<a href="http://mycompany.net/Events/12345">Party<a>
DESCRIPTION:mycompany.net/Events/12345
LOCATION:Restaurant name, 123 Elm, San Diego CA
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:My company’s event
END:VEVENT
END:VCALENDAR
我明白任何建議...謝謝!
我的代碼...很不起眼,但請注意,我將開始&結束時間UTC:
private static Attachment CreateEventCalendarReminder(DataRow dr)
{
var sb = new StringBuilder();
string nowUTCString = DateTime.Now.ToUniversalTime().ToString("yyyyMMddTHHmmssZ");
sb.AppendLine("BEGIN:VCALENDAR");
sb.AppendLine("PRODID:-//Save to my Calendar");
sb.AppendLine("VERSION:2.0");
sb.AppendLine("METHOD:PUBLISH");
//sb.AppendLine("TZ:+00");
sb.AppendLine("BEGIN:VEVENT");
sb.AppendLine("DTSTART:" + DateTime.Parse(dr["StartDate"].ToString()).ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
sb.AppendLine("DTEND:" + DateTime.Parse(dr["EndDate"].ToString()).ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
sb.AppendLine("DTSTAMP:" + nowUTCString);
sb.AppendLine("UID:" + Guid.NewGuid());
sb.AppendLine("CREATED:" + nowUTCString);
sb.AppendLine("LAST-MODIFIED:" + nowUTCString);
sb.AppendLine("X-ALT-DESC;FMTTYPE=text/html:"
+ "Thank you for registering for our event. Click "
+ (string)dr["EventDescHyperlink"]
+ " DetermineWhichEmailsToSend view the event details. We look forward to seeing you Attachment the EventArgs and appreciate your support.");
sb.AppendLine("DESCRIPTION:" + (string)dr["EventDescURL"]);
sb.AppendLine("LOCATION:" + (string)dr["VenueCombinedInfo"]);
sb.AppendLine("SEQUENCE:0");
sb.AppendLine("STATUS:CONFIRMED");
sb.AppendLine("SUMMARY:" + "My Company" + (string)dr["OfficeName"] + " Event");
sb.AppendLine("END:VEVENT");
sb.AppendLine("END:VCALENDAR");
var calendarBytes = Encoding.UTF8.GetBytes(sb.ToString());
MemoryStream ms = new MemoryStream(calendarBytes);
return new System.Net.Mail.Attachment(ms, "EventReminder.ics", "text/calendar");
}