使用C#发送Outlook会议请求

11

我想从C#发送Outlook会议邀请。我有下面的代码可以完成任务,但是...

string startTime1 = Convert.ToDateTime(startTime).ToString("yyyyMMddTHHmmssZ");
string endTime1 = Convert.ToDateTime(endTime).ToString("yyyyMMddTHHmmssZ");
SmtpClient sc = new SmtpClient("");

MailMessage msg = new MailMessage();

msg.From = new MailAddress("", "HR Self Service");
msg.To.Add(new MailAddress(emailto));
msg.Subject = "Holiday Approval";
msg.Body = emailbody;

StringBuilder str = new StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");

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

str.AppendLine("BEGIN:VEVENT");

str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", startTime1));//TimeZoneInfo.ConvertTimeToUtc("BeginTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", endTime1));//TimeZoneInfo.ConvertTimeToUtc("EndTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(string.Format("LOCATION: {0}", "Location"));

// UID should be unique.
str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
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");
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
ct.Parameters.Add("name", "meeting.ics");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct);
msg.AlternateViews.Add(avCal);
//Response.Write(str);
// sc.ServicePoint.MaxIdleTime = 2;
sc.Send(msg);

发送邀请时,需要用户接受邀请,当用户接受邀请后,Outlook日历将显示状态为BUSY
有没有办法发送邀请,而无需用户接受,并且Outlook日历显示为“Out Of Office”? 我已经尝试过这两个部分,但没有成功

str.AppendLine("ACTION:Accept");
str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY");

这是一个很好的问题。但是,我无法想象Exchange会让任何旧的SMTP消息自动接受会议请求。 - itsme86
itsme86,感谢您的评论。是否有任何新的SMTP可以让我发送电子邮件并自动接受会议请求? - user4031669
不是SMTP,但你有没有考虑过Exchange Web Services(EWS)?http://msdn.microsoft.com/en-us/library/office/dd877045%28v=exchg.140%29.aspx - itsme86
1
我正在尝试使用这段代码从用C#编写的控制台应用程序发送会议请求,是否有任何配置服务器的操作我需要执行?它给了我一个错误(未指定SMTP主机)。 - Laila
@Laila你需要在第3行的空字符串中指定你的smtp主机: SmtpClient sc = new SmtpClient(""); - AnimNations
显示剩余3条评论
1个回答

1
如果这是一个资源邮箱,您可以配置它自动接受会议邀请(文件|选项|日历|自动接受或拒绝)。
如果这是一个任意邮箱,没有所有者的许可就不会发生任何事情。如果您有用户凭据,最好的方法是直接使用Outlook对象模型/ EWS / MAPI访问邮箱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接