【问题标题】:ASP.NET C# Insert Html code in EmailASP.NET C# 在电子邮件中插入 Html 代码
【发布时间】:2013-08-04 23:16:48
【问题描述】:

我无法理解一个事实... 我创建了一个发送电子邮件的表单,它运行得非常好。 现在我已经扩展了一个带有扩展 html 的 ajax 控制工具包的文本框,当我收到电子邮件时,我没有看到所有代码......我举了一个例子。 我已经发送了这个:

<table><tbody><tr><td rowspan="2"> </td><td><b>LA QUALITA' ALPITOUR</b></td></tr><tr><td> </td></tr></tbody></table>

在电子邮件中,我只看到粗体字...所有其他代码都已编写且可见...为什么? 我希望我已经很好地解释了我的问题......我不是英语,我写得不是很好。

如果需要,这是我的代码隐藏:

protected void Btn_SendMail_Click(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("danieleluciani92@gmail.com");
    msg.To.Add("danieleluciani92@gmail.com");
    msg.Subject = txtSubject.Text;
    msg.IsBodyHtml = true;
    msg.Body = txtBody.Text;
    SmtpClient sc = new SmtpClient("smtp.gmail.com");
    sc.Port = 25;
    sc.Credentials = new NetworkCredential("danieleluciani92@gmail.com", "Dead2006!");
    sc.EnableSsl = true;
    sc.Send(msg);
    Response.Write("<script>alert('ennamo');</script>");
}

这是我的 html/asp 代码:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<span class="fontS">A:
    <asp:TextBox ID="txtTo" runat="server" Font-Size="X-Small" ReadOnly="True">Tutti Gli Utenti</asp:TextBox>
    <br />
    Oggetto:
    <asp:TextBox ID="txtSubject" runat="server" Font-Size="X-Small" /><br />
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    </span>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <span class="fontS">Tipo di Email:</span><asp:DropDownList ID="DropDownList1" runat="server" Font-Size="X-Small" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Selected="True">Testo Libero</asp:ListItem>
            <asp:ListItem>Email Con Offerte</asp:ListItem>
        </asp:DropDownList>
        <br />
        <asp:CheckBoxList ID="CheckBoxList1" runat="server" Visible="False" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
        </asp:CheckBoxList>
        <br />
        <asp:TextBox ID="txtBody" runat="server" Height="550px" TextMode="MultiLine" Width="900px" />
        <asp:HtmlEditorExtender ID="txtBody_HtmlEditorExtender" runat="server" TargetControlID="txtBody" EnableSanitization="False">
        </asp:HtmlEditorExtender>
    </ContentTemplate>
</asp:UpdatePanel>
<br />
<asp:Button ID="Btn_SendMail" runat="server" OnClick="Btn_SendMail_Click" Text="Invia" /><br />

之前感谢您的回答!

【问题讨论】:

  • 如果您的电子邮件程序(用于查看电子邮件)理解 HTML 消息,那么您将不会看到所有 HTML 标记 - 它将用于呈现内容图像。

标签: c# html asp.net email


【解决方案1】:

您需要将电子邮件的内容类型定义为text/html,使用AlternateView,您可以将电子邮件以文本和html 格式发送。您只需将 ContentTypetext/html 添加为备用视图,如下所示:

protected void Btn_SendMail_Click(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();

    ContentType mimeType = new System.Net.Mime.ContentType("text/html");
    // Decode the html in the txtBody TextBox...    
    string body = HttpUtility.HtmlDecode(txtBody.Text);
    AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);
    msg.AlternateViews.Add(alternate);

    msg.From = new MailAddress("danieleluciani92@gmail.com");
    msg.To.Add("danieleluciani92@gmail.com");
    msg.Subject = txtSubject.Text;
    msg.IsBodyHtml = true;
    msg.Body = body;
    SmtpClient sc = new SmtpClient("smtp.gmail.com");
    sc.Port = 25;
    sc.Credentials = new NetworkCredential("danieleluciani92@gmail.com", "Dead2006!");
    sc.EnableSsl = true;
    sc.Send(msg);
    Response.Write("<script>alert('ennamo');</script>");
}

【讨论】:

  • 谢谢你的回答,我想问你: CreateAlternateViewFromString(body, mimeType)
  • 解释 OP 的代码和您的建议之间的区别将使这成为一个很好的答案,并帮助可能面临类似问题的未来读者。
  • @DanieleNekoLuciani,您不应该收到该错误消息。确保您的代码与我发布的完全一样。我用一些解释更新了我的答案。
  • 尝试在代码中硬编码 html,而不是从 txtBody.Text 获取它,看看它是否有效。
  • @DanieleNekoLuciani,顺便说一句,您在代码中暴露了您的 gmail 密码。我建议您更改密码。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2016-11-23
相关资源
最近更新 更多