【问题标题】:Structuring a table in an email在电子邮件中构建表格
【发布时间】:2015-05-29 08:50:01
【问题描述】:

我在控制台应用程序中列出了一些从电子邮件中获取的数据。在我发送包含所有这些列出数据的电子邮件之后。问题是数据没有以一种很好的方式结构化,并且电子邮件无法理解。我尝试使用 body html 但失败了。我想知道是否有人可以帮助我弄清楚如何构建电子邮件。下面是我在c#中的代码

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
using System.Net;

namespace sql_connection
{
    class Program
    {
        static void Main(string[] args) 
        {
            string conn = null;
            SqlConnection connection;
            conn = ("Data Source=Database\\SQL2012;Initial Catalog=jobs;User ID=user;Password=passs");

            connection = new SqlConnection(conn);
            try
            {            
                connection.Open();
                Console.WriteLine("Connection Open!");
                SqlCommand cmd = new SqlCommand("SELECT jobs.[dbo].[tb_work].whd_Date,jobs.[dbo].[tb_work].whd_FromTime,jobs.[dbo].[tb_work].whd_ToTime, jobs.[dbo].[tb_work].whd_User,jobs.[dbo].[tb_UserLogin].login_Email FROM jobs.[dbo].[tb_work]INNER JOIN jobs.[dbo].[tb_UserLogin] ON jobs.[dbo].[tb_work].whd_User = jobs.[dbo].[tb_UserLogin].login_LoginId WHERE  DATEDIFF(DAY,[whd_FromTime],GETDATE())<=7 AND   (whd_ToTime = '' OR whd_ToTime IS NULL) AND(whd_User=login_LoginId)");
                cmd.Connection = connection;
                SqlDataReader reader = cmd.ExecuteReader();
                var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();

                var list = new List<string>();
                var col = new List<string>();

                while(reader.Read())
                {
                    var s = string.Format(" {1}     {0}         {2}       {3} ",
                                reader["whd_ToTime"] == DBNull.Value 
                                    ? "NULL" : reader["whd_ToTime"].ToString(), 
                                reader["whd_FromTime"] == DBNull.Value
                                    ? "NULL" : reader["whd_FromTime"].ToString(),                     
                                reader["whd_User"].ToString(),
                                reader["login_Email"].ToString());

                    Console.WriteLine(string.Join("   ", columns.ToArray()));

                    Console.WriteLine(s);
                    list.Add(s);
                }

                var sb = new StringBuilder();
                foreach (var s in list)
                {
                    sb.AppendLine(s);
                }

                connection.Close();

                MailMessage message;                    
                message=new MailMessage();

                MailAddress to = new MailAddress("xxxx@gmail.com");

                MailAddress from = new MailAddress("xxxx@gmail.com");

                MailMessage mail = new MailMessage(from, to);

                mail.Subject = ("missed punch clock");

                message.IsBodyHtml = true;

                StringBuilder html = new StringBuilder();

                html.AppendFormat("<!DOCTYPE html>");
                html.AppendFormat("<html><body><table>");
                html.AppendFormat("<tr><td>");

                html.Append("<table width=600px border=1 cellspacing=2 cellpadding=2 align=center bgcolor=White dir=ltr rules=all style=border-width: thin; border-style: solid; line-height: normal; vertical-align: baseline; text-align: center; font-family: Calibri; font-size: medium; font-weight: normal; font-style: normal; font-variant: normal; color: #000000; list-style-type: none;>");
                for (int rowind = 0; rowind < 1; rowind++)
                {
                    html.Append("<tr>");
                    html.Append("<td>");
                    html.Append("<table width=600px border=1 cellspacing=2 cellpadding=2 align=center bgcolor=White dir=ltr rules=all style=border-width: thin; border-style: solid; line-height: normal; vertical-align: baseline; text-align: center; font-family: Calibri; font-size: medium; font-weight: normal; font-style: normal; font-variant: normal; color: #000000; list-style-type: none;>");

                    for (int newrowind = 0; newrowind < 1; newrowind++)
                    {
                        html.AppendFormat("<tr>");
                        html.Append("<td colspan=1  style=font-weight:bold>");
                        html.Append("whd_ToTime");
                        html.Append("</td>");
                        html.Append("<td colspan=2 style=font-weight:bold>");
                        html.Append("whd_FromTime");
                        html.Append("</td>");
                        html.Append("<td colspan=3 style=font-weight:bold>");
                        html.Append("whd_User");
                        html.Append("</td>");
                        html.Append("</tr>");

                        foreach (var s in list)
                        {
                            html.AppendFormat("<tr>");
                            html.Append("<td colspan=1  style=font-weight:bold>");
                            html.Append(sb.ToString());
                            html.Append("</td>");
                            html.Append("</tr>");
                        }
                    }

                    html.Append("</tr>");
                    html.Append("</td>");
                    html.Append("</table>");
                }

                html.Append("</table>");
                html.AppendFormat("</td></tr>");
                html.AppendFormat("</table></html></body>");

                mail.Body= html.ToString();
                mail.IsBodyHtml = true;

                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;

                smtp.Credentials = new NetworkCredential("xxxx"gmail.com", xxxxxxxx");
                smtp.EnableSsl = true;
                Console.WriteLine("Sending email..");
                smtp.Send(mail);
            } 
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

【问题讨论】:

  • 我建议您实际查看您的代码生成的 HTML 文本。你会注意到你没有创建一个有效的 HTML 表格,更不用说一个 HTML 页面了。唯一相关的行是 string html = ... ,您可以从帖子中删除其余代码
  • 您的代码甚至没有构建,请先更正它。
  • 好吧好吧让我安排一下
  • 我会重复同样的评论 - 查看 HTML。不要发送电子邮件,而是将文本保存到文件中并进行检查。您仍然没有创建正确的表格 - 您没有关闭表格标签,而是将样式属性的内容放在标签本身中。也许,您应该首先尝试使用表格创建一个适当的 HTML 文件,然后使用该 HTML 作为如何构建电子邮件的指南

标签: c# html-email


【解决方案1】:

首先,为了查明您的问题,只需查看生成的 HTML,这样您就可以检测生成它的代码中的问题。你可以做的是首先用 HTML 设计邮件,当它看起来不错时,编写你的代码来实现它。

阅读您在代码中加载的 HTML 模板(作为嵌入式资源)并为您的自定义数据使用占位符而不是在代码中构建 HTML 更容易 - 因为这样您将视图 (HTML) 与逻辑分开。

请注意,格式化邮件是一项艰巨的任务,因为您必须考虑各种设备和邮件客户端。如果您希望它们在所有这些上都很好地显示,那么您最好使用像 Zurb Ink 这样的框架,而不是自己做所有事情 - 这为您提供了最好的机会来获得可在大多数设备和客户端上运行的响应式电子邮件。

【讨论】:

  • 所以我更新了它并且表格正在形成,但现在我遇到了问题。我需要数据库中的 4 列位于它们的列中,它们不应该位于一列中的所有数据之下。基本上我不知道如何在彼此下的列中输入数据
  • 你的意思是你不懂 HTML?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2012-12-10
  • 2017-10-19
相关资源
最近更新 更多