在会议邀请正文中发送 Html C#

San*_*isy 3 c# asp.net asp.net-mvc asp.net-mvc-4

我需要发送带有 html body 标签的会议请求。我已成功发送会议请求,它工作完美。

这是 ICS 文件格式

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//A//B//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER;CN="Organizer":mailto:#FROM#
ATTENDEE;CN="Attendee";CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=
 NEEDS-ACTION;RSVP=TRUE:mailto:#TO#
DTSTART:#DTSTART#
DTEND:#DTEND#
LOCATION:#LOCATION#
SUMMARY: Invitation for Meeting
TRANSP:OPAQUE
SEQUENCE:0
UID:#UID#
DTSTAMP:#CREATED-AT#
CREATED:#CREATED-AT#
LAST-MODIFIED:#CREATED-AT#
DESCRIPTION: #DESCRIPTION#
X-ALT-DESC;FMTTYPE=text/html: #X-ALT-DESC#
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

我找到了一些使用 X-ALT-DESC 选项发送 html 链接的链接,但它对我不起作用

使用 C# 发送 Outlook 会议请求

使用 C# 发送 Outlook 会议请求

向 Outlook 发送包含 ics 会议预约的电子邮件

向 Outlook 发送包含 ics 会议预约的电子邮件

以下是发送带有 ICS 文件的电子邮件的 C# 代码

filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "Email/calenderInvitation.ics");
                fileContent = System.IO.File.OpenText(filePath).ReadToEnd();
                fileContent = fileContent.Replace("#TO#", receiver);
                fileContent = fileContent.Replace("#FROM#", fromAddress.Address);
                fileContent = fileContent.Replace("#LOCATION#", eventVenue);
                fileContent = fileContent.Replace("#UID#", Guid.NewGuid().ToString().Replace("-", ""));
                fileContent = fileContent.Replace("#CREATED-AT#", Convert.ToDateTime(meetingDate).ToString(TimeFormat));
                fileContent = fileContent.Replace("#DTSTART#", Convert.ToDateTime(startTime).ToString(TimeFormat));
                fileContent = fileContent.Replace("#DTEND#", Convert.ToDateTime(finishTime).ToString(TimeFormat));
                filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "Email/InvitationEmail.html");
                fileInviationContent = System.IO.File.OpenText(filePath).ReadToEnd();
                String body = AppendRedirectURl(fileInviationContent, callBackUrl);
                fileContent = fileContent.Replace("#X-ALT-DESC#", body);
                MailMessage message = new MailMessage();
               // message.IsBodyHtml = true;
                message.From = new MailAddress(fromAddress.Address);
                message.To.Add(new MailAddress(receiver));
                message.Subject = string.Format("{0}  {1} @ {2} {3} {4} {5} - {6}", "Invitation: ", meetingTypeName,
                    Convert.ToDateTime(meetingDate).ToString("dddd"), Convert.ToDateTime(startTime).ToString("MMMM"),
                    Convert.ToDateTime(startTime).ToString("yyyy"), startTime,
                    finishTime);

                var iCalendarContentType = new ContentType("text/calendar; method=REQUEST");
                var calendarView = AlternateView.CreateAlternateViewFromString(fileContent, iCalendarContentType);
                calendarView.TransferEncoding = TransferEncoding.SevenBit;
                message.AlternateViews.Add(calendarView);
                await smtp.SendMailAsync(message);
Run Code Online (Sandbox Code Playgroud)

这是调试器响应

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//A//B//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER;CN="Organizer":mailto:admin@wordflow.info
ATTENDEE;CN="Attendee";CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=
 NEEDS-ACTION;RSVP=TRUE:mailto:anandjaisy@gmail.com
DTSTART:20171206T081500Z
DTEND:20171206T090000Z
LOCATION:asdasd
SUMMARY: Invitation for Meeting
TRANSP:OPAQUE
SEQUENCE:0
UID:b17f15326c5343ff98d76bf6092ed2b4
DTSTAMP:20171212T000000Z
CREATED:20171212T000000Z
LAST-MODIFIED:20171212T000000Z
DESCRIPTION: #DESCRIPTION#
X-ALT-DESC;FMTTYPE=text/html: <html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
    <br><br><br>
    <form class="container">
        <div class="form-group">
            <label>Click on  Accept or Decline to add event to your Email Calender </label>
        </div>
        <div class="form-group">
            <label>Will you Attend the Meeting</label>
            <a href="https://localhost:44380/Meetings/GotMeetingConfirm?userId=08c5bb4f-f4f8-4183-a99a-e82544970dd4&meetingId=6c9747e2-aeb9-4d27-8db6-077ee1d9cee9&resposne=True" id="YesConfirmMeeting" class="btn btn-primary">Yes</a>
            <a href="https://localhost:44380/Meetings/GotMeetingConfirm?userId=08c5bb4f-f4f8-4183-a99a-e82544970dd4&meetingId=6c9747e2-aeb9-4d27-8db6-077ee1d9cee9&resposne=False" id="NoConfirmMeeting" class="btn btn-danger">No</a>
        </div>
        <div class="form-group text-center">

        </div>
    </form>


</body>
</html>
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

已发送邀请但正文尚未发送

Kev*_* UI 5

我在此链接中找到了解决方案(视觉基本)https://social.msdn.microsoft.com/Forums/en-US/2cd0dcff-7d6c-493e-bf49-87a3e3248d01/create-meeting-request-with-html-body -in-aspnet?forum=netfxnetcom

基本上,您添加第二个AlternateView。下面是我是如何做到的。我的“body”字符串有我的html。我确实注意到,如果我在“avHtmlBody”之前添加“avCalendar”,我的会议会在 Outlook 中中断。所以我想顺序很重要。

在我的会议请求字符串中,我删除了描述和 X-ALT-DESC 部分。

MailMessage msg = new MailMessage(from, to);

var htmlContentType = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Html);
var avHtmlBody = AlternateView.CreateAlternateViewFromString(body, htmlContentType);
msg.AlternateViews.Add(avHtmlBody);

string meetingRequestString = GetMeetingRequestString(from, to, subject, body, startTime, endTime);
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
ct.Parameters.Add("name", "meeting.ics");
AlternateView avCalendar = AlternateView.CreateAlternateViewFromString(meetingRequestString, ct);
msg.AlternateViews.Add(avCalendar);
client.Send(msg);
Run Code Online (Sandbox Code Playgroud)