Добавление ICal в электронное письмо, не поддерживающее тело HTML, вместе с ним в C# ASP.NET - PullRequest
0 голосов
/ 17 июня 2020

У меня проблема с ICAL в почте. Все работает, кроме html body. если у меня нет ical, то тело html отображается в электронном письме, но если я использую ICAL, полный html отображается как текст. Кто-нибудь может сказать мне, в чем проблема с этим кодом!

public static void SendHTMLEmailWithGoogleInvite(string from, string to, string subj, string body, DateTime date)
{
    System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage();
    try { mm.To.Add(to); }
    catch (Exception ex)
    {
        throw new Exception("Invalid receiver email address please update and retry again.", ex);

    }
    mm.To.Add(to);
    from.Split();
    mm.From = new System.Net.Mail.MailAddress(from);
    mm.Subject = subj;
    mm.Body = body;
    mm.IsBodyHtml = true;
    System.Net.Mail.SmtpClient SMTPServer = new System.Net.Mail.SmtpClient(ConfigurationManager.AppSettings["mailServer"]);
    SMTPServer.Port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]);
    SMTPServer.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["SMTPUser"], ConfigurationManager.AppSettings["Pwd"]);

    StringBuilder str = new StringBuilder();
    str.AppendLine("BEGIN:VCALENDAR");
    str.AppendLine("PRODID:-//GeO");
    str.AppendLine("VERSION:2.0");
    str.AppendLine("METHOD:REQUEST");
    str.AppendLine("BEGIN:VEVENT");
    str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine("LOCATION: " + "KOLKATA");
    str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));

    str.AppendLine(string.Format("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:{0}", mm.Body));

    str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", mm.Body));
    str.AppendLine(string.Format("SUMMARY;ENCODING=QUOTED-PRINTABLE:{0}", mm.Subject));


    str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", mm.From.Address));
    str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:{1}", mm.From.DisplayName, mm.From.Address));
    str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-STATUS=1.2:mailto:{1}", mm.To[0].DisplayName, mm.To[0].Address));



    str.AppendLine("BEGIN:VALARM");
    str.AppendLine("TRIGGER:-PT24H");
    str.AppendLine("ACTION:DISPLAY");
    str.AppendLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Reminder");
    str.AppendLine("END:VALARM");
    str.AppendLine("END:VEVENT");
    str.AppendLine("END:VCALENDAR");
    System.Net.Mime.ContentType type = new System.Net.Mime.ContentType("text/calendar");
    type.Parameters.Add("method", "REQUEST");
    //type.Parameters.Add("method", "PUBLISH");
    type.Parameters.Add("name", "ginvite.ics");
    mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(str.ToString(), type));

    SMTPServer.Send(mm);

}

Прикрепил снимок экрана электронного письма, где тело html отображается как html текст со всеми тегами.

This HTML mail body is showing as text in the email which is the problem

1 Ответ

0 голосов
/ 17 июня 2020

Наконец-то! я могу заставить его работать. Мне пришлось добавить содержимое html с отдельным представлением с текстом типа mime / html

    public static void SendHTMLEmailWithGoogleInvite(string from, string to, string subj, string body, DateTime date)
{
    System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage();
    try { mm.To.Add(to); }
    catch (Exception ex)
    {
        throw new Exception("Invalid receiver email address please update and retry again.", ex);

    }
    mm.To.Add(to);
    from.Split();
    mm.From = new System.Net.Mail.MailAddress(from);
    mm.Subject = subj; 
    System.Net.Mime.ContentType typeHtml = new System.Net.Mime.ContentType("text/html");

    AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body, typeHtml);
    mm.AlternateViews.Add(htmlView);


    System.Net.Mail.SmtpClient SMTPServer = new System.Net.Mail.SmtpClient(ConfigurationManager.AppSettings["mailServer"]);
    SMTPServer.Port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]);
    SMTPServer.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["SMTPUser"], ConfigurationManager.AppSettings["Pwd"]);

    StringBuilder str = new StringBuilder();
    str.AppendLine("BEGIN:VCALENDAR");
    str.AppendLine("PRODID:-//GeO");
    str.AppendLine("VERSION:2.0");
    str.AppendLine("METHOD:REQUEST");
    str.AppendLine("BEGIN:VEVENT");
    str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", date));
    str.AppendLine("LOCATION: " + "KOLKATA");
    str.AppendLine(string.Format("UID:{0}", Guid.NewGuid())); 
    str.AppendLine(string.Format("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:{0}", body));
    str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", body));
    str.AppendLine(string.Format("SUMMARY;ENCODING=QUOTED-PRINTABLE:{0}", mm.Subject));
    str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", mm.From.Address));
    str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:{1}", mm.From.DisplayName, mm.From.Address));
    str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-STATUS=1.2:mailto:{1}", mm.To[0].DisplayName, mm.To[0].Address)); 
    str.AppendLine("BEGIN:VALARM");
    str.AppendLine("TRIGGER:-PT24H");
    str.AppendLine("ACTION:DISPLAY");
    str.AppendLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Reminder");
    str.AppendLine("END:VALARM");
    str.AppendLine("END:VEVENT");
    str.AppendLine("END:VCALENDAR");
    System.Net.Mime.ContentType type = new System.Net.Mime.ContentType("text/calendar");
    type.Parameters.Add("method", "REQUEST"); 
    type.Parameters.Add("name", "ginvite.ics");
    mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(str.ToString(), type)); 
    SMTPServer.Send(mm);

}
...