首页 > 解决方案 > 如何替换 HTML 内容?

问题描述

我是 C# 编程的新手。作为一项研究,我正在制作一个应用程序,该应用程序将向生日当天的员工发送一封电子邮件。
我能够完成发送电子邮件的任务。但是我的电子邮件启用了 html,我想在其中显示生日员工的姓名。
在 HTML 页面上,我创建了一个表格,其中将有一行名称。

<tr>
<td> Name</td>
<td>#Name#</td>
</tr>

我从数据库中提取的记录并将它们存储在数据适配器中,然后存储在字符串中。我正在使用String Replace()函数来更新名称。

DataTable dt = null;
string Body = System.IO.File.ReadAllText("path of HTML file");
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand("query"))
    {
        cmd.Connection = con;
        cmd.Parameters.AddWithValue("@Day", DateTime.Today.Day);
        cmd.Parameters.AddWithValue("@Month", DateTime.Today.Month);
        using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
        {
            sda.Fill(dt);
        }
    }
}
foreach (DataRow row in dt.Rows)
{
    string name = row["Name"].ToString();
    string dob = row["DOB"].ToString();

    DateTime dob1 = DateTime.Parse(row["DOB"].ToString());
    if ((dob1.Day == DateTime.Today.Day) && (dob1.Month == DateTime.Today.Month))
    {
        Body = Body.Replace("#Name#", name);
        Body = Body.Replace("#dob#", dob);

        using (MailMessage mm = new MailMessage("From Email address", "To email address"))
        {
            mm.Subject = "Birthday Greetings";
            mm.Body = Body;
            mm.IsBodyHtml = true;

            SmtpClient smtp = new SmtpClient();
            smtp.Host = "Mail Server";
            System.Net.NetworkCredential credentials = new System.Net.NetworkCredential();
            smtp.UseDefaultCredentials = true;
            smtp.Credentials = credentials;
            smtp.Port = 587;
            smtp.Send(mm);
        }
    }
}

替换函数正在 foreach 循环下执行以检查所有员工。
但是,如果多个员工的生日同时出现,我会在所有电子邮件中使用相同的名字。我猜替换功能第一次起作用,并且在下一次迭代中不会替换。

请求是否提供一些有效的方法。

标签: c#htmlasp.net

解决方案


每次从循环中的位置读取 HTML 模板文件。您需要的是带有#NAME# 等的html 文本。我认为您正在阅读它一次并且它们正在循环运行。在您循环访问的每一行中,使用新的 HTML 模板。


推荐阅读