asp.net - 发送包含表格的电子邮件

标签 asp.net vb.net html-email mailmessage

我正在使用 MailMessage 创建电子邮件,并希望嵌入动态填充的表格。我已将 MailMessage 属性设置为 IsBodyHtml,因此我已经能够将 HTML 编码文本插入到电子邮件正文中。使用它,我可以轻松创建表格的顶部和底部,但创建行似乎是一个 StringBuilder 噩梦。

该表将有 6 列和可变数量的行,这些行将从集合中填充。请求者不希望将数据作为附件发送。

关于如何最好地开发更好的解决方案有什么建议吗?

提前致谢

最佳答案

这根本不是一个StringBuilder噩梦。

您可以构建一个类,将其命名为 TableBuilder 或任何您喜欢的名称,它将封装此逻辑。

    public class TableBuider
    {

        private StringBuilder builder = new StringBuilder();


        public string[] BodyData { get; set; }
        public int BodyRows { get; set; }


        public TableBuider(int bodyRows, string[] bodyData)
        {
            BodyData = bodyData;
            BodyRows = bodyRows;
        }

        /// <summary>
        /// Since your table headers are static, and your table body
        /// is variable, we don't need to store the headers. Instead
        /// we need to know the number of rows and the information
        /// that goes in those rows.
        /// </summary>
        public TableBuider(string[] tableInfo, int bodyRows)
        {
            BodyData = tableInfo;
            BodyRows = bodyRows;
        }

        public string BuildTable()
        {
            BuildTableHead();
            BuildTableBody();
            return builder.ToString();
        }

        private void BuildTableHead()
        {
            builder.Append("<table>");
            builder.Append("<thead>");
            builder.Append("<tr>");
            AppendTableHeader("HeaderOne");
            AppendTableHeader("HeaderTwo");
            builder.Append("</tr>");
            builder.Append("</thead>");
        }

        private void BuildTableBody()
        {
            builder.Append("<tbody>");
            builder.Append("<tr>");
            // For every row we need added, append a <td>info</td>
            // to the table from the data we have
            for (int i = 0; i < BodyRows; i++)
            {
                AppendTableDefinition(BodyData[i]);
            }
            builder.Append("</tr>");
            builder.Append("</table");
        }

        private void AppendTableHeader(string input)
        {
            AppendTag("th", input);
        }

        private void AppendTableDefinition(string input)
        {
            AppendTag("td", input);
        }

        private void AppendTag(string tag, string input)
        {
            builder.Append("<" + tag + ">");
            builder.Append(input);
            builder.Append("</" + tag + ">");
        }

    }
}

AppendTableHeaderAppendTableDefinitionAppendTag 方法封装了 StringBuilder 的所有繁琐部分。

这也只是一个基本示例,您也可以在此基础上进行构建。

关于asp.net - 发送包含表格的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121908/

相关文章:

c# - 在 asp.net 视频上创建控件时出错

c# - ASP.NET C# 网络摄像头集成

asp.net - 在 asp.net 中使用像公共(public)变量这样的类

电子邮件在 Outlook 和 Hotmail 中显示为空白

asp.net - 如何在子文件夹中托管ASP.NET MVC站点

asp.net - 在 ASP.NET MVC 3 中更改 Membership.ValidateUser() 和其他内容

vb.net - 如何使用 VB.NET 加密 mysqldump 的输出?

sql-server - SSRS代码共享变量和同时执行报告

html - HTML 电子邮件中不显示图像?

java - Thymeleaf Rich HTML 电子邮件错误