繁体   English   中英

在不支持 HTML 主体的 email 上添加 Ical

[英]Adding ICal on email not supporting HTML body along with it in C# ASP.NET

我在 email 中的 ICAL 存在问题。除了 html 主体外,一切都在工作。 如果我没有 ical 则 html 主体显示在 email 但如果我使用 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);

}

附上 email 的屏幕截图,其中 html 主体显示为带有所有标签的 html 文本。

此 HTML 邮件正文在电子邮件中显示为文本,这是问题所在

最后。 我能够让它工作。 我必须添加具有单独视图的 html 内容和 mime 类型 text/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);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM