c#同僚们,最近我在做一个发送邮件发送i'calendar的功能,在网上找了好多资料,自己无数次修改以及测试,终于成功了
下面时我的成功实例,至于各个属性在这里就不多做介绍了
1、创建
public string createEmail() { StringBuilder sb = new StringBuilder(); sb.Append(@"BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VEVENT DTSTART:20171026T083000Z DTEND:20171026T093000Z DTSTAMP:20171026T082604Z ORGANIZER:mailto:[email protected] UID:[email protected] 5656 ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] CREATED:20171026T082604Z DESCRIPTION:ssssssss LAST-MODIFIED:20171026T082604Z LOCATION: PRIORITY:5 SEQUENCE:0 STATUS:CONFIRMED SUMMARY: TRANSP:OPAQUE END:VEVENT END:VCALENDAR "); return sb.ToString(); }
这里的PRIORITY:5SEQUENCE:0其实是设置优先级以及顺序号的,本人测试过其实这两个参数在增删改时保持不变也没有出错。注意保持UID的唯一性
修改和创建其实只要UID保持一致然后修改你所需要的内容即可,比如修改开会时间
public string updateEmailNew() { StringBuilder sb = new StringBuilder(); sb.Append(@"BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VEVENT DTSTART:20171026T083000Z DTEND:20171027T093000Z DTSTAMP:20171027T082604Z ORGANIZER:mailto:[email protected] UID:[email protected] 5656 ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] CREATED:20171026T082604Z DESCRIPTION:ssssssss LAST-MODIFIED:20171026T082604Z LOCATION: PRIORITY:5 SEQUENCE:1 STATUS:CONFIRMED SUMMARY: TRANSP:OPAQUE END:VEVENT END:VCALENDAR "); return sb.ToString(); }
这里我修改了会议邀请的时间,等邮件收到接受邀请后会将原来的会议时间改成这个时间
取消会议
public string CancelEmail() { StringBuilder sb = new StringBuilder(); sb.Append(@"BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:CANCEL BEGIN:VEVENT DTSTART:20171026T083000Z DTEND:20171027T093000Z DTSTAMP:20171027T082604Z ORGANIZER:mailto:[email protected] UID:[email protected] 5656 ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] ATTENDEE:TYPE=INDIVIDUAL Mailto:[email protected] CREATED:20171026T082604Z DESCRIPTION:ssssssss LAST-MODIFIED:20171026T082604Z LOCATION: PRIORITY:5 SEQUENCE:2 STATUS:CONFIRMED SUMMARY: TRANSP:OPAQUE END:VEVENT END:VCALENDAR "); return sb.ToString(); }
上面的代码注意空格以及各个属性间的符号,稍微多出空格或者符号就会生成不成功对此我付出了很多时间,
下面是发送邮件时的处理
string content= createEmail(); System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar"); contype.Parameters.Add("method", "REQUEST"); contype.Parameters.Add("charset", "UTF-8"); System.Net.Mail.AlternateView avCal = System.Net.Mail.AlternateView.CreateAlternateViewFromString(content, contype); msg.AlternateViews.Add(avCal); msg.Body = body; client.Send(msg);