asp.net - 如何使用 ASP.NET VB 以编程方式取消 Outlook session ?

标签 asp.net .net visual-studio outlook outlook-calendar

我可以以编程方式创建一个 session 请求,该请求通过代码发送给用户并显示在 Outlook 邮件中,用户可以在其中接受请求,如果接受,约会将显示在他们的 Outlook 日历上。但我无法弄清楚如何以编程方式取消同一事件。

下面的代码是我用来发送 session 邀请的代码。它按预期工作并将请求发送给接收者,他们可以接受或拒绝。如果接受,约会就会出现在他们的日历上。

 Dim smtpServer As String = ConfigurationManager.AppSettings("MailServer").ToString()
 Dim credentials As New NetworkCredential(ConfigurationManager.AppSettings("SMTPUser").ToString(), ConfigurationManager.AppSettings("SMTPPassword").ToString())

 Dim startTime1 As String = Convert.ToDateTime("10/30/2015 11:00 AM").ToString("yyyyMMddTHHmmss")
 Dim endTime1 As String = Convert.ToDateTime("10/30/2015 01:00 PM").ToString("yyyyMMddTHHmmss")
 Dim smtp As New SmtpClient(smtpServer)
 smtp.Credentials = credentials

 Dim msg As New MailMessage()
 Dim emailFrom As String = ConfigurationManager.AppSettings("EmailFrom").ToString()
 Dim emailTo As String = "jd@dom.com"
 msg.From = New MailAddress(emailFrom, "Scheduling System")
 msg.[To].Add(New MailAddress(emailTo))
 msg.Subject = "JD"

 Dim strBody As New StringBuilder()
 strBody.AppendLine("Appointment Confirmation")
 strBody.AppendLine("Subject: JD")
 strBody.AppendLine("1599")
 strBody.AppendLine("Location: Exam 1")
 strBody.AppendLine("Date: 10/30/2015")
 strBody.AppendLine("Time: 11:00AM - 1:00PM")

 msg.Body = strBody.ToString()

 Dim str As New StringBuilder()
 str.AppendLine("BEGIN:VCALENDAR")

 'PRODID: identifier for the product that created the Calendar object
 str.AppendLine("PRODID:-//CARS//Outlook MIMEDIR//EN")
 str.AppendLine("VERSION:2.0")
 str.AppendLine("METHOD:REQUEST")

 str.AppendLine("BEGIN:VEVENT")

 str.AppendLine(String.Format("DTSTART:{0:yyyyMMddTHHmmss}", startTime1))
 'TimeZoneInfo.ConvertTimeToUtc("BeginTime").ToString("yyyyMMddTHHmmssZ")));
 str.AppendLine(String.Format("DTSTAMP:{0:yyyyMMddTHHmmss}", DateTime.Now))
 str.AppendLine(String.Format("DTEND:{0:yyyyMMddTHHmmss}", endTime1))       
 'TimeZoneInfo.ConvertTimeToUtc("EndTime").ToString("yyyyMMddTHHmmssZ")));
 str.AppendLine(String.Format("LOCATION:{0}", "Exam 1"))

 ' UID should be unique.
 str.AppendLine(String.Format("UID:{0}", "jd101"))
 str.AppendLine(String.Format("DESCRIPTION:{0}", msg.Body))
 str.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body))
 str.AppendLine(String.Format("SUMMARY:{0}", msg.Subject))

 str.AppendLine("STATUS:CONFIRMED")
 str.AppendLine("BEGIN:VALARM")
 str.AppendLine("TRIGGER:-PT15M")
 str.AppendLine("ACTION:Accept")
 str.AppendLine("DESCRIPTION:Reminder")
 str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY")
 str.AppendLine("END:VALARM")
 str.AppendLine("END:VEVENT")

 str.AppendLine(String.Format("ORGANIZER:MAILTO:{0}", msg.From.Address))
 str.AppendLine(String.Format("ATTENDEE;CN=""{0}"";RSVP=TRUE:mailto:{1}", msg.[To](0).DisplayName, msg.[To](0).Address))

 str.AppendLine("END:VCALENDAR")
 Dim ct As New System.Net.Mime.ContentType("text/calendar")
 ct.Parameters.Add("method", "REQUEST")
 ct.Parameters.Add("name", "meeting.ics")
 Dim avCal As AlternateView = AlternateView.CreateAlternateViewFromString(str.ToString(), ct)
 msg.AlternateViews.Add(avCal)
 smtp.Send(msg)

下面的代码是我必须取消现有 session 的代码。它就像上面的代码一样发送通知,但它不会取消/删除/移除 session 。有人可以指出我正确的方向吗?我只是希望在运行这部分代码时从 Outlook 日历中删除该事件。感谢您的帮助。

Dim smtpServer As String = ConfigurationManager.AppSettings("MailServer").ToString()
Dim credentials As New NetworkCredential(ConfigurationManager.AppSettings("SMTPUser").ToString(), ConfigurationManager.AppSettings("SMTPPassword").ToString())

Dim startTime1 As String = Convert.ToDateTime("10/30/2015 11:00 AM").ToString("yyyyMMddTHHmmss")
Dim endTime1 As String = Convert.ToDateTime("10/30/2015 01:00 PM").ToString("yyyyMMddTHHmmss")
Dim smtp As New SmtpClient(smtpServer)
smtp.Credentials = credentials

Dim msg As New MailMessage()
Dim emailFrom As String = ConfigurationManager.AppSettings("EmailFrom").ToString()
Dim emailTo As String = "jd@dom.com"
msg.From = New MailAddress(emailFrom, "Scheduling System")
msg.[To].Add(New MailAddress(emailTo))
msg.Subject = "JD"

Dim strBody As New StringBuilder()
strBody.AppendLine("Appointment Confirmation")
strBody.AppendLine("Subject: JD")
strBody.AppendLine("HRPO#: 1599")
strBody.AppendLine("Location: Exam 1")
strBody.AppendLine("Date: 10/30/2015")
strBody.AppendLine("Time: 11:00AM - 1:00PM")

msg.Body = strBody.ToString()

Dim str As New StringBuilder()
str.AppendLine("BEGIN:VCALENDAR")

'PRODID: identifier for the product that created the Calendar object
str.AppendLine("PRODID:-//CARS//Outlook MIMEDIR//EN")
str.AppendLine("VERSION:2.0")
str.AppendLine("METHOD:REQUEST")

str.AppendLine("BEGIN:VEVENT")

str.AppendLine(String.Format("DTSTART:{0:yyyyMMddTHHmmss}", startTime1))
'TimeZoneInfo.ConvertTimeToUtc("BeginTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(String.Format("DTSTAMP:{0:yyyyMMddTHHmmss}", DateTime.Now))
str.AppendLine(String.Format("DTEND:{0:yyyyMMddTHHmmss}", endTime1))
'TimeZoneInfo.ConvertTimeToUtc("EndTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(String.Format("LOCATION:{0}", "Exam 1"))

' UID should be unique.
str.AppendLine(String.Format("UID:{0}", "jd101"))
str.AppendLine(String.Format("DESCRIPTION:{0}", msg.Body))
str.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body))
str.AppendLine(String.Format("SUMMARY:{0}", msg.Subject))

str.AppendLine("STATUS:CANCELLED")
str.AppendLine("BEGIN:VALARM")
str.AppendLine("TRIGGER:-PT15M")
str.AppendLine("ACTION:Accept")
str.AppendLine("DESCRIPTION:Reminder")
str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY")
str.AppendLine("END:VALARM")
str.AppendLine("END:VEVENT")

str.AppendLine(String.Format("ORGANIZER:MAILTO:{0}", msg.From.Address))
str.AppendLine(String.Format("ATTENDEE;CN=""{0}"";RSVP=TRUE:mailto:{1}", msg.[To](0).DisplayName, msg.[To](0).Address))

str.AppendLine("END:VCALENDAR")
Dim ct As New System.Net.Mime.ContentType("text/calendar")
ct.Parameters.Add("method", "CANCEL")
ct.Parameters.Add("name", "meeting.ics")
Dim avCal As AlternateView = AlternateView.CreateAlternateViewFromString(str.ToString(), ct)
msg.AlternateViews.Add(avCal)
smtp.Send(msg)

最佳答案

已回答

要取消 session 并将其从 Outlook 日历中删除,您需要将发送取消请求的事件的方法从“请求”更改为“取消”。

msg.Body = strBody.ToString()

Dim str As New StringBuilder()
str.AppendLine("BEGIN:VCALENDAR")

'PRODID: identifier for the product that created the Calendar object
str.AppendLine("PRODID:-//CARS//Outlook MIMEDIR//EN")
str.AppendLine("VERSION:2.0")
'''ORIGINAL-CHANGE TO CANCEL'''
'str.AppendLine("METHOD:REQUEST")
'''NEW - CHANGE TO CANCEL'''
str.AppendLine("METHOD:CANCEL")
'''Everything else remains the same. Will work and remove meeting from calendar.'''

关于asp.net - 如何使用 ASP.NET VB 以编程方式取消 Outlook session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442680/

相关文章:

ASP.NET RewritePath 未按预期工作/浏览器中的 URL 发生变化

javascript - jquery UI 模式不会导致回发

c# - Form.ShowDialog() 不破坏句柄

visual-studio - 如何有效地使用 SOS 调试扩展?

c++ - 非常量引用绑定(bind)到临时的 Visual Studio 错误?

c# - ASP.NET 项目的 Oracle 到 SQL Server 数据库迁移

c# - 在 ASP.NET 项目中运行 FFMPEG 时不断收到 WIN32Exception

.net - 实现消息总线架构

c# - System.IdentityModel.Selectors.UserNamePasswordValidator 不存在

c# - Visual Studio 2017 中的本地主机端口正在更改