发送带有附件和日历邀请的电子邮件
Send email with Attachments and Calendar Invite
我正在开发服务,我想发送带有附件(图像、pdf、文档)的电子邮件和 ics 日历邀请作为备用视图。每当我发送带有附件的邮件时,邮件中缺少 ics 日历邀请,但是当我的邮件中没有任何附件时,我就可以收到日历邀请。
这是我的代码
if (Convert.ToString(DR["ATTACHMENT"]) != "") //mail_att
{
message.Attachments.Add(new Attachment(DR["ATTACHMENT"].ToString()));
}
if (Convert.ToString(DR["SCRIPT"]) != "") //Mail_Sub
{
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(Convert.ToString(DR["SCRIPT"]), ct);
message.AlternateViews.Add(avCal);
}
MailMessage 对象消息显示附件和 AlternateView 计数,每当我添加附件时,邮件中仍然缺少日历邀请。
看看话题Send email to Outlook with ics meeting appointment
// 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");
如果您使用直接 SMTP 发送,附件必须嵌入到 ATTACH 字段的 VEVENT 部分内:
ATTACH;ENCODING=BASE64;VALUE=BINARY;X-FILENAME=test.txt:NBIBANyGrhFvX6xL...
在 Outlook 中创建一个带附件的约会并将其保存为来自 Outlook 的 ICS 文件作为测试,然后在记事本中打开该 ICS 文件然后您可以检查脚本的外观,在您的 AlternateView 日历脚本中进行更改
我正在开发服务,我想发送带有附件(图像、pdf、文档)的电子邮件和 ics 日历邀请作为备用视图。每当我发送带有附件的邮件时,邮件中缺少 ics 日历邀请,但是当我的邮件中没有任何附件时,我就可以收到日历邀请。
这是我的代码
if (Convert.ToString(DR["ATTACHMENT"]) != "") //mail_att
{
message.Attachments.Add(new Attachment(DR["ATTACHMENT"].ToString()));
}
if (Convert.ToString(DR["SCRIPT"]) != "") //Mail_Sub
{
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(Convert.ToString(DR["SCRIPT"]), ct);
message.AlternateViews.Add(avCal);
}
MailMessage 对象消息显示附件和 AlternateView 计数,每当我添加附件时,邮件中仍然缺少日历邀请。
看看话题Send email to Outlook with ics meeting appointment
// 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");
如果您使用直接 SMTP 发送,附件必须嵌入到 ATTACH 字段的 VEVENT 部分内:
ATTACH;ENCODING=BASE64;VALUE=BINARY;X-FILENAME=test.txt:NBIBANyGrhFvX6xL...
在 Outlook 中创建一个带附件的约会并将其保存为来自 Outlook 的 ICS 文件作为测试,然后在记事本中打开该 ICS 文件然后您可以检查脚本的外观,在您的 AlternateView 日历脚本中进行更改