C#发送会议(约会)邀请

模型类:

    /// <summary>
    /// 使用net发送邮件实体类
    /// </summary>
    public class NetMeetingModel
    {
        private DateTime start;
        /// <summary>         
        /// 会议起始时间        
        /// </summary>       
        public DateTime Start
        {
            get { return this.start; }
            set { this.start = value; }
        }
        private DateTime end;
        /// <summary>         
        /// 会议结束时间         
        /// </summary>        
        public DateTime End
        {
            get { return this.end; }
            set { this.end = value; }
        }
        private string summary;
        /// <summary>         
        /// 会议主题         
        /// </summary>        
        public string Summary
        {
            get { return this.summary; }
            set { this.summary = value; }
        }
        private string location;
        /// <summary>         
        /// 会议地点         
        /// </summary>          
        public string Location
        {
            get { return this.location; }
            set { this.location = value; }
        }
        private string description;
        /// <summary>         
        /// 会议的详细说明         
        /// </summary>        
        public string Description
        {
            get { return this.description; }
            set { this.description = value; }
        }
        private string organizerName;
        /// <summary>         
        /// 发送人姓名        
        /// </summary>         
        public string OrganizerName
        {
            get { return this.organizerName; }
            set { this.organizerName = value; }
        }
        private string organizerEmail;
        /// <summary>         
        /// 发送人邮箱         
        /// </summary>          
        public string OrganizerEmail
        {
            get { return this.organizerEmail; }
            set { this.organizerEmail = value; }
        }
        private List<string> requiredRecipients = new List<string>();
        /// <summary>         
        /// 必选收件人邮件         
        /// </summary>          
        public List<string> RequiredRecipients
        {
            get { return this.requiredRecipients; }
            set { this.requiredRecipients = value; }
        }
        private List<string> optionalRecipients = new List<string>();
        /// <summary>        
        /// 传抄收件人邮件        
        /// </summary>         
        public List<string> OptionalRecipients
        {
            get { return this.optionalRecipients; }
            set { this.optionalRecipients = value; }
        }
        private List<string> resourceRecipients = new List<string>();
        /// <summary>        
        /// 密传抄收件人邮件         
        /// </summary>         
        public List<string> ResourceRecipients
        {
            get { return this.resourceRecipients; }
            set { this.resourceRecipients = value; }
        }

        private string body;
        /// <summary>         
        /// 邮件内容       
        /// </summary>          
        public string Body
        {
            get { return this.body; }
            set { this.body = value; }
        }

    }

(一):调用OUTLOOK API

添加引用:Microsoft.Office.Interop.Outlook

public class NetMeetingManager
    {         
        // 邮件实体类          
        private NetMeetingModel CalendarModel;
        /// <summary>         
        /// 构造函数         
        /// </summary>          
        public NetMeetingManager(NetMeetingModel model)
        {
            this.CalendarModel = model;
        }

	public static void SendAppointByOutlook()
        {
            try
            {
                var oApp = new ApplicationClass(); // 会议是约会的一种 
                AppointmentItem oItem = (AppointmentItem)oApp.CreateItem(OlItemType.olAppointmentItem);
                oItem.MeetingStatus = OlMeetingStatus.olMeeting; // 会议主题 
                oItem.Subject = this.CalendarModel.Summary;// 会议主题  
                oItem.Body = this.CalendarModel.Body; // 会议内容  
                oItem.Location = this.CalendarModel.Location;// 会议地点  
                oItem.Start = this.CalendarModel.Start; // 会议开始时间 
                oItem.End = this.CalendarModel.End;// 会议结束时间 
                oItem.ReminderSet = true; // 提醒设置
                oItem.ReminderMinutesBeforeStart = 5; 
                oItem.AllDayEvent = true; // 是否全天事件 
                oItem.BusyStatus = OlBusyStatus.olBusy; // 显示为忙 
		oItem.SendUsingAccount = oApp.Session.Accounts[1];// 发件人的帐号信息(索引从1开始,而不是从0)
                // 添加必选人 
                foreach (string recipient in this.CalendarModel.RequiredRecipients)
                {
                    if (!string.IsNullOrEmpty(recipient))
                    {
                        Recipient force = oItem.Recipients.Add(recipient);
                        force.Type = (int)OlMeetingRecipientType.olRequired;
                    }
                }
		// 添加可选人 
		foreach (string recipient in this.CalendarModel.OptionalRecipients) 
		{ 
		    if (!string.IsNullOrEmpty(recipient))
                    {
			Recipient opt = oItem.Recipients.Add(recipient);
			opt.Type = (int)OlMeetingRecipientType.olOptional; 
		    }
		}
		// 添加会议发起者				
		if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                {
		     Recipient sender = oItem.Recipients.Add(this.CalendarModel.OrganizerEmail);
		     sender.Type = (int)OlMeetingRecipientType.olOrganizer;
                }
		oItem.Recipients.ResolveAll();
                oItem.Send();
            }
            catch (Exception ex)
            {
            }
        }
    }
	public static void SendAppointByOutlook()
        {
            尝试
            {
                var oApp = new ApplicationClass(); //会议是约会的一种 
                AppointmentItem oItem =(AppointmentItem)oApp.CreateItem(OlItemType.olAppointmentItem);
                oItem.MeetingStatus = OlMeetingStatus.olMeeting; //会议主题 
                oItem.Subject = this.CalendarModel.Summary; //会议主题  
                oItem.Body = this.CalendarModel.Body; //会议内容  
                oItem.Location = this.CalendarModel.Location; //会议地点  
                oItem.Start = this.CalendarModel.Start; //会议开始时间 
                oItem.End = this.CalendarModel.End; //会议结束时间 
                oItem.ReminderSet = true; //提醒设置
                oItem.ReminderMinutesBeforeStart = 5; 
                oItem.AllDayEvent = true; //是否全天事件 
                oItem.BusyStatus = OlBusyStatus.olBusy; //显示为忙 
		oItem.SendUsingAccount = oApp.Session.Accounts [1]; //发件人的帐号信息(索引从1开始,而不是从0)
                //添加必选人 
                foreach(this.CalendarModel.RequiredRecipients中的字符串收件人)
                {
                    if(!string.IsNullOrEmpty(recipient))
                    {
                        收件人的力量= oItem.Recipients.Add(收件人);
                        force.Type =(int)OlMeetingRecipientType.olRequired;
                    }
                }
		//添加可选人 
		foreach(this.CalendarModel.OptionalRecipients中的字符串收件人) 
		{ 
		    if(!string.IsNullOrEmpty(recipient))
                    {
			收件人opt = oItem.Recipients.Add(收件人);
			opt.Type =(int)OlMeetingRecipientType.olOptional; 
		    }
		}
		//添加会议发起者				
		if(!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                {
		     收件人发件人= oItem.Recipients.Add(this.CalendarModel.OrganizerEmail);
		     sender.Type =(int)OlMeetingRecipientType.olOrganizer;
                }
		oItem.Recipients.ResolveAll();
                oItem.Send();
            }
            catch(Exception ex)
            {
            }
        }
    }

 

(二):使用SmtpClient

 

public class NetMeetingManager
    {   // 发送邮件地址         
        string credentialEmail = ConfigurationManager.AppSettings["MailFrom"].ToString();
        // 发送邮件密码          
        string credentialPassword = ConfigurationManager.AppSettings["MailFromPWD"].ToString();
         //邮件服务器
	string smtpserver = ConfigurationManager.AppSettings["smtpserver"].ToString();
        // 邮件实体类          
        private NetMeetingModel CalendarModel;
        /// <summary>         
        /// 构造函数         
        /// </summary>          
        public NetMeetingManager(NetMeetingModel model)
        {
            this.CalendarModel = model;
        }
        /// <summary>        
        /// 发送邮件         
        /// </summary>          
        public void SendEmail()
        {
            try
            {
                #region 设置邮件信息                  
                MailMessage mail = new MailMessage();
                // 解决邮件标头的编码问题                 
                Encoding czCoding = Encoding.UTF8;
                // 邮件标头 
                mail.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
                // 邮件主题                 
                mail.Subject = this.CalendarModel.Summary;
                mail.SubjectEncoding = czCoding;
                // 设置邮件的优先级                 
                mail.Priority = MailPriority.Normal;
                // 设置邮件的发送通知                 
                mail.DeliveryNotificationOptions = DeliveryNotificationOptions.None;
                // 发件人邮件                  
                mail.From = new MailAddress(this.credentialEmail, this.CalendarModel.Location, czCoding);
                // 收件人邮件                  
                foreach (string requiredemail in this.CalendarModel.RequiredRecipients)
                {
                    if (!string.IsNullOrEmpty(requiredemail))
                    {
                        mail.To.Add(new MailAddress(requiredemail, requiredemail, czCoding));
                    }
                }
                // 传抄收件人邮件                  
                foreach (string optionalemail in this.CalendarModel.OptionalRecipients)
                {
                    if (!string.IsNullOrEmpty(optionalemail))
                    {
                        mail.CC.Add(new MailAddress(optionalemail, optionalemail, czCoding));
                    }
                }
                // 密传抄收件人邮件                  
                foreach (string resourceemail in this.CalendarModel.ResourceRecipients)
                {
                    if (!string.IsNullOrEmpty(resourceemail))
                    {
                        mail.Bcc.Add(new MailAddress(resourceemail, resourceemail, czCoding));
                    }
                }
                //对组织者进行传抄一份                  
                if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                {
                    mail.CC.Add(new MailAddress(this.CalendarModel.OrganizerEmail, this.CalendarModel.OrganizerName, czCoding));
                }
                // 设置邮件正文                  
                mail.Body = this.CalendarModel.OrganizerName + ":" + this.CalendarModel.Description;
                mail.BodyEncoding = Encoding.UTF8;
                mail.IsBodyHtml = true;
                // 在邮件中设置不同的Mime类型                  
                ContentType typeText = new ContentType("text/plain");
                ContentType typeHtml = new ContentType("text/html");
                ContentType typeCalendar = new ContentType("text/calendar");
                //向calendar header添加参数                  
                typeCalendar.Parameters.Add("method", "REQUEST");
                typeCalendar.Parameters.Add("charset", "utf-8");
                typeCalendar.Parameters.Add("name", "meeting.ics");
				
		//使用文本类型创建邮件的body部分 
                //AlternateView viewText = AlternateView.CreateAlternateViewFromString(this.CalendarModel.Body, typeText); 
		//mail.AlternateViews.Add(viewText);
		// 使用html格式创建邮件的body部分 
                AlternateView viewHtml = AlternateView.CreateAlternateViewFromString(this.CalendarModel.Body, typeHtml);
                mail.AlternateViews.Add(viewHtml);
                // 使用vcalendar格式创建邮件的body部分                 
                AlternateView viewCalendar = AlternateView.CreateAlternateViewFromString(this.CalendarGenerate(this.CalendarModel.Body), typeCalendar);
                viewCalendar.TransferEncoding = TransferEncoding.SevenBit;
                mail.AlternateViews.Add(viewCalendar);
                SmtpClient smtp = new SmtpClient(this.smtpserver);
                // 是否使用默认证书                  
                smtp.UseDefaultCredentials = false;
                // 获取发件人验证证书                  
                smtp.Credentials = new NetworkCredential(this.credentialEmail, this.credentialPassword);
                // 通过网络处理待发电子邮件                 
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                // 使用套间字加密连接                 
                smtp.EnableSsl = false;
                // 发送邮件 
                smtp.Send(mail);
                #endregion
            }
            catch (Exception ex)
            {
            }
        }

        /// <summary>          
        /// 生成ics文件(为以Outlook主要参考)         
        /// </summary>          
        /// <returns></returns>         
        private string CalendarGenerate(string strBodyHtml)
        {
            string calDateFormat = "yyyyMMddTHHmmssZ";
            StringBuilder sb = new StringBuilder();
            sb.Append("BEGIN:VCALENDAR").Append("\r\n");
            sb.Append("PRODID:").Append("-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN").Append("\r\n");
            sb.Append("VERSION:2.0").Append("\r\n");
            sb.Append("METHOD:REQUEST").Append("\r\n");
            sb.Append("X-MS-OLK-FORCEINSPECTOROPEN:TRUE").Append("\r\n");
            sb.Append("BEGIN:VEVENT").Append("\r\n");
            if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail))
            {
                sb.Append("ORGANIZER;CN=\"").Append(this.CalendarModel.OrganizerName).Append("\":MAILTO" + ":").Append(this.CalendarModel.OrganizerEmail).Append("\r\n");
            }
            foreach (string recipient in this.CalendarModel.RequiredRecipients)
            {
                sb.Append("ATTENDEE;CN=\"" + recipient + "\";RSVP=TRUE:mailto:" + recipient).Append("\r\n");
            }
            foreach (string recipient in this.CalendarModel.OptionalRecipients)
            {
                sb.Append("ATTENDEE;CN=\"" + recipient + "\";ROLE=OPT-PARTICIPANT;RSVP=TRUE:mailto:" + recipient).Append("\r\n");
            }
            foreach (string recipient in this.CalendarModel.ResourceRecipients)
            {
                sb.Append("ATTENDEE;CN=\"" + recipient + "\";CUTYPE=RESOURCE;ROLE=NON-PARTICIPANT;RSVP=TRUE:mailto:" + recipient).Append("\r\n");
            }
            sb.Append("CLASS:PUBLIC").Append("\r\n");
            sb.Append("CREATED:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("DESCRIPTION:").Append(this.NotNull(this.CalendarModel.Description)).Append("\r\n");
            sb.Append("DTEND:").Append(this.CalendarModel.End.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("DTSTAMP:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("DTSTART:").Append(this.CalendarModel.Start.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("LAST-MODIFIED:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("LOCATION:").Append(this.NotNull(this.CalendarModel.Location)).Append("\r\n");
            sb.Append("PRIORITY:5").Append("\r\n");
            sb.Append("SEQUENCE:0").Append("\r\n");
            sb.Append("SUMMARY:").Append(this.NotNull(this.CalendarModel.Summary)).Append("\r\n");
            sb.Append("UID:").Append(Guid.NewGuid().ToString().Replace("-", "") + Guid.NewGuid().ToString().Replace("-", "")).Append("\r\n");
            sb.Append("X-ALT-DESC;FMTTYPE=text/html:").Append(strBodyHtml).Append("\r\n");
            sb.Append("STATUS:CONFIRMED").Append("\r\n");
            sb.Append("TRANSP:OPAQUE").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-BUSYSTATUS:BUSY").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-IMPORTANCE:1").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-INSTTYPE:0").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-ALLDAYEVENT:FALSE").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-OWNERAPPTID:-611620904").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-APPT-SEQUENCE:0").Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("X-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
            sb.Append("BEGIN:VALARM").Append("\r\n");
            sb.Append("ACTION:DISPLAY").Append("\r\n");
            sb.Append("DESCRIPTION:REMINDER").Append("\r\n");
            sb.Append("TRIGGER;RELATED=START:-PT00H15M00S").Append("\r\n");
            sb.Append("END:VALARM").Append("\r\n"); sb.Append("END:VEVENT").Append("\r\n");
            sb.Append("END:VCALENDAR").Append("\r\n");
            return sb.ToString();
        }
        /// <summary>         
        /// 设定不为null值         
        /// </summary>         
        /// <param name="str"></param>         
        /// <returns></returns>          
        private string NotNull(string str)
        {
            return str ?? String.Empty;
        }
    }

 

 

 

您可以使用C#和Outlook Interop库来发送会议邀请。以下是一个示例代码,它使用SmtpClient类和MailMessage类构造邮件发送: ``` using Microsoft.Office.Interop.Outlook; using System.Net.Mail; // 创建 Outlook 应用程序实例 var outlookApp = new Application(); // 创建一个新的 AppointmentItem 对象 var appointment = (AppointmentItem)outlookApp.CreateItem(OlItemType.olAppointmentItem); // 设置会议邀请的相关信息,例如开始时间,结束时间,主题等 appointment.Start = DateTime.Now.AddHours(1); appointment.End = DateTime.Now.AddHours(2); appointment.Subject = "会议邀请"; appointment.Location = "会议室"; appointment.Body = "这是一个测试会议邀请"; // 添加参与者 appointment.Recipients.Add("example@example.com"); // 将 AppointmentItem 对象保存到 Outlook 日历中 appointment.Save(); // 创建 MailMessage 对象并添加 Outlook 会议邀请文件作为附件 var message = new MailMessage(); message.Attachments.Add(new Attachment(appointment.GetICalExporter().SaveAsICal())); // 设置邮件相关信息,例如收件人,主题等 message.To.Add("example@example.com"); message.Subject = appointment.Subject; // 创建 SmtpClient 对象并发送邮件 var smtpClient = new SmtpClient("smtp.example.com"); smtpClient.Send(message); ``` 请注意,本示例代码使用 Outlook 应用程序和 SmtpClient 类来发送邮件,因此您需要在本地安装 Outlook 应用程序,或者您也可以使用其他支持 iCalendar 文件格式的邮件客户端来接收会议邀请
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值