直接通过SMTP服务发Exchange会议邀请邮件

本文介绍了一种通过SMTP协议发送Exchange会议邀请的方法。利用.NET Framework中的MailMessage类及AlternateView特性,可以创建包含多种格式(如纯文本、HTML和iCalendar)的邮件内容。这种方式避免了直接使用Outlook对象模型的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Send Exchange meeting by SmtpClient mail

See initiated Conference calls the Outlook API in c # , this way can use SMTP to achieve, my project using the following code:

For the . NET from 2.0 started, e-mail is already a very easy thing. And it has introduced a new AlternateView, use the AlternateView class to specify a different e-mail format. For example, if you are sending HTML -formatted messages, you might also want to provide a message to plain text format, in case some of the recipients use e-mail readers that cannot display HTML content.

Through the use of AlternateView we can achieve Exchange meeting message is sent. The core code is as follows:

         

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 = stringFormat(bodyText, organizerName, start. ToLongDateString() + " " + start. ToLongTimeString(), end. ToLongDateString() + " " + end.ToLongTimeString(), System. TimeZoneCurrentTimeZone.StandardName, location, summary);

            AlternateView textView = AlternateViewCreateAlternateViewFromString(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 = stringFormat(bodyHTML,summary,organizerName,start. ToLongDateString() + " " + start. ToLongTimeString(),end. ToLongDateString() + " " + end.ToLongTimeString(),System. TimeZoneCurrentTimeZone.StandardName,location,summary);

            AlternateView HTMLView = AlternateViewCreateAlternateViewFromString(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 = stringFormat(bodyCalendar,start. ToUniversalTime(). ToString(calDateFormat),end. ToUniversalTime().ToString(calDateFormat),location,organizerName,organizerEmail,GuidNewGuid(). ToString("B"),summary,subject,DateTimeNow.ToUniversalTime().ToString(calDateFormat),attendeeList.ToString());

            AlternateView calendarView = AlternateViewCreateAlternateViewFromString(bodyCalendar, calendarType);

calendarView.TransferEncoding = TransferEncodingSevenBit;

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值