前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过SmtpClient发送Exchange会议邮件

通过SmtpClient发送Exchange会议邮件

作者头像
张善友
发布2018-01-19 11:01:58
1K0
发布2018-01-19 11:01:58
举报
文章被收录于专栏:张善友的专栏张善友的专栏

看到C#中调用Outlook API 发起会议 ,这个完全可以用SMTP方式实现的,下面我的项目中使用的代码:

对于.NET而言,从2.0开始,发邮件已经是一件非常容易的事了。而且新增了一个AlternateView,使用 AlternateView 类可以指定一个电子邮件的不同格式副本。例如,如果您发送 HTML 格式的邮件,您可能希望同时提供邮件的纯文本格式,以防一些收件人使用的电子邮件阅读程序无法显示HTML 内容。

通过使用AlternateView我们就可以实现Exchange 会议邮件的发送。核心代码如下:

代码语言:js
复制
           MailMessage msg = new MailMessage();    

  // Set up the different mime types contained in the message    
            System.Net.Mime.ContentType textType = new System.Net.Mime.ContentType("text/plain");    
            System.Net.Mime.ContentType HTMLType = new System.Net.Mime.ContentType("text/html");    
            System.Net.Mime.ContentType calendarType = new System.Net.Mime.ContentType("text/calendar");    

  // Add parameters to the calendar header    
            calendarType.Parameters.Add("method", "REQUEST");    
            calendarType.Parameters.Add("name", "meeting.ics");    

  // Create message body parts    
 
 // create the Body in text format    
 string bodyText = "Type:Single Meeting"r"nOrganizer: {0}"r"nStart Time:{1}"r"nEnd Time:{2}"r"nTime Zone:{3}"r"nLocation: {4}"r"n"r"n*~*~*~*~*~*~*~*~*~*"r"n"r"n{5}";    
            bodyText = string.Format(bodyText, organizerName, start.ToLongDateString() + " " + start.ToLongTimeString(), end.ToLongDateString() + " " + end.ToLongTimeString(), System.TimeZone.CurrentTimeZone.StandardName, location, summary);    
 AlternateView textView = AlternateView.CreateAlternateViewFromString(bodyText, textType);    
            msg.AlternateViews.Add(textView);    
 
 //create the Body in HTML format    
 string bodyHTML = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2//EN"">"r"n<HTML>"r"n<HEAD>"r"n<META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; charset=utf-8"">"r"n<META NAME=""Generator"" CONTENT=""MS Exchange Server version 6.5.7652.24"">"r"n<TITLE>{0}</TITLE>"r"n</HEAD>"r"n<BODY>"r"n<!-- Converted from text/plain format -->"r"n<P><FONT SIZE=2>Type:Single Meeting<BR>"r"nOrganizer:{1}<BR>"r"nStart Time:{2}<BR>"r"nEnd Time:{3}<BR>"r"nTime Zone:{4}<BR>"r"nLocation:{5}<BR>"r"n<BR>"r"n*~*~*~*~*~*~*~*~*~*<BR>"r"n<BR>"r"n{6}<BR>"r"n</FONT>"r"n</P>"r"n"r"n</BODY>"r"n</HTML>";    
            bodyHTML = string.Format(bodyHTML,summary,organizerName,start.ToLongDateString() + " " + start.ToLongTimeString(),end.ToLongDateString() + " " + end.ToLongTimeString(),System.TimeZone.CurrentTimeZone.StandardName,location,summary);    
 AlternateView HTMLView = AlternateView.CreateAlternateViewFromString(bodyHTML, HTMLType);    
            msg.AlternateViews.Add(HTMLView);    
 
 //create the Body in VCALENDAR format    
 string calDateFormat = "yyyyMMddTHHmmssZ";    
 string bodyCalendar = "BEGIN:VCALENDAR"r"nMETHOD:REQUEST"r"nPRODID:Microsoft CDO for Microsoft Exchange"r"nVERSION:2.0"r"nBEGIN:VTIMEZONE"r"nTZID:(GMT-06.00) Central Time (US & Canada)"r"nX-MICROSOFT-CDO-TZID:11"r"nBEGIN:STANDARD"r"nDTSTART:16010101T020000"r"nTZOFFSETFROM:-0500"r"nTZOFFSETTO:-0600"r"nRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU"r"nEND:STANDARD"r"nBEGIN:DAYLIGHT"r"nDTSTART:16010101T020000"r"nTZOFFSETFROM:-0600"r"nTZOFFSETTO:-0500"r"nRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU"r"nEND:DAYLIGHT"r"nEND:VTIMEZONE"r"nBEGIN:VEVENT"r"nDTSTAMP:{8}"r"nDTSTART:{0}"r"nSUMMARY:{7}"r"nUID:{5}"r"nATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=""{9}"":MAILTO:{9}"r"nACTION;RSVP=TRUE;CN=""{4}"":MAILTO:{4}"r"nORGANIZER;CN=""{3}"":mailto:{4}"r"nLOCATION:{2}"r"nDTEND:{1}"r"nDESCRIPTION:{7}""N"r"nSEQUENCE:1"r"nPRIORITY:5"r"nCLASS:"r"nCREATED:{8}"r"nLAST-MODIFIED:{8}"r"nSTATUS:CONFIRMED"r"nTRANSP:OPAQUE"r"nX-MICROSOFT-CDO-BUSYSTATUS:BUSY"r"nX-MICROSOFT-CDO-INSTTYPE:0"r"nX-MICROSOFT-CDO-INTENDEDSTATUS:BUSY"r"nX-MICROSOFT-CDO-ALLDAYEVENT:FALSE"r"nX-MICROSOFT-CDO-IMPORTANCE:1"r"nX-MICROSOFT-CDO-OWNERAPPTID:-1"r"nX-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:{8}"r"nX-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE:{8}"r"nBEGIN:VALARM"r"nACTION:DISPLAY"r"nDESCRIPTION:REMINDER"r"nTRIGGER;RELATED=START:-PT00H15M00S"r"nEND:VALARM"r"nEND:VEVENT"r"nEND:VCALENDAR"r"n";    

            bodyCalendar = string.Format(bodyCalendar,start.ToUniversalTime().ToString(calDateFormat),end.ToUniversalTime().ToString(calDateFormat),location,organizerName,organizerEmail,Guid.NewGuid().ToString("B"),summary,subject,DateTime.Now.ToUniversalTime().ToString(calDateFormat),attendeeList.ToString());    
 AlternateView calendarView = AlternateView.CreateAlternateViewFromString(bodyCalendar, calendarType);    
            calendarView.TransferEncoding = TransferEncoding.SevenBit;    
            msg.AlternateViews.Add(calendarView);    

  // Address the message    
            msg.From = new MailAddress(organizerEmail);    
 foreach (MailAddress attendee in attendeeList)    
            {        
                msg.To.Add(attendee);    
            }    
            msg.Subject = subject;
 return msg;

http://rongchaua.net/blog/sharepoint-send-appointment-without-using-outlook-object/

http://cul.codeplex.com/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009-07-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档