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("[email protected]", "ABC");
msg.To.Add(new MailAddress("[email protected]", "BCD"));
msg.CC.Add(new MailAddress("[email protected]", "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でテストしています)では本文、場所、データが表示され、カレンダーが表示されますが、メールのカレンダーの上に「カレンダーで会議を見つけることができません」と表示されます。 「」および「承認」、「拒否」ボタンが無効になっています。
私は他の解決策を試し、例えばウェブ上で見つけました。 DDAY.Icalですが、使用例が見つかりません。
たくさん掘り下げた後、私は解決策を見つけました:
電子メールのコンテンツクラスをに設定する必要があります
Content-class: urn:content-classes:calendarmessage
これをコードに追加すると、機能するはずです
msg.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
msg.Fromとmsg.Toの両方で同じメールIDを使用したと思います
msg.From = new MailAddress("[email protected]", "ABC");
msg.To.Add(new MailAddress("[email protected]", "BCD"));
私は同じ問題に直面しましたが、別の電子メールを受け取った後、解決します。