【发布时间】:2014-05-09 04:31:03
【问题描述】:
我想向 Outlook 客户端发送一封带有约会\会议 (ICS) 的电子邮件。当用户收到电子邮件时,他应该接受会议邀请,会议自动进入日历,电子邮件被自动删除。
我正在使用此代码:
public void Sendmail_With_IcsAttachment()
{
MailMessage msg = new MailMessage();
//Now we have to set the value to Mail message properties
//Note Please change it to correct mail-id to use this in your application
msg.From = new MailAddress("xxxxx@xyz.com", "ABC");
msg.To.Add(new MailAddress("yyyyy@xyz.com", "BCD"));
msg.CC.Add(new MailAddress("zzzzz@xyz.com", "DEF"));// it is optional, only if required
msg.Subject = "Send mail with ICS file as an Attachment";
msg.Body = "Please Attend the meeting with this schedule";
// Now Contruct the ICS file using string builder
StringBuilder str = new StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");
str.AppendLine("PRODID:-//Schedule a Meeting");
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", DateTime.Now.AddMinutes(+330)));
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", DateTime.Now.AddMinutes(+660)));
str.AppendLine("LOCATION: " + this.Location);
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(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("BEGIN:VALARM");
str.AppendLine("TRIGGER:-PT15M");
str.AppendLine("ACTION:DISPLAY");
str.AppendLine("DESCRIPTION:Reminder");
str.AppendLine("END:VALARM");
str.AppendLine("END:VEVENT");
str.AppendLine("END:VCALENDAR");
//Now sending a mail with attachment ICS file.
System.Net.Mail.SmtpClient smtpclient = new System.Net.Mail.SmtpClient();
smtpclient.Host = "localhost"; //-------this has to given the Mailserver IP
smtpclient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar");
contype.Parameters.Add("method", "REQUEST");
contype.Parameters.Add("name", "Meeting.ics");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), contype);
msg.AlternateViews.Add(avCal);
smtpclient.Send(msg);
}
邮件已正确发送,但在 Outlook 中(我正在使用 Outlook 2010 对其进行测试)它显示正文、位置、数据,并显示日历,但在邮件中的日历上方我看到“无法找到会议在日历上”和“接受”、“拒绝””按钮被禁用!
我尝试了其他解决方案,并在网上找到了 ex。 DDAY.Ical,但我没有找到任何使用它的示例。
【问题讨论】:
-
仅供参考,您的
MailMessage和SmtpClient都需要在using块中:using (MailMessage msg = new MailMessage()){... using (SmtpClient smtpClient = new SmtpClient()){ ... smtpClient.Send(msg);}} -
好的,谢谢,但我不认为这是问题
-
不管是不是问题,你都应该这样做——我看到邮件在 2 分钟内没有送达,直到垃圾收集器开始清理。
-
您能否将生成的完整 MIME 消息添加到您的帖子中?
-
如何获得完整的 MIME 消息?
标签: c# email icalendar appointment