2015-05-29 139 views
-1

我在從電子郵件中獲取的控制檯應用程序中列出了一些數據。在發送包含所有列出的數據的電子郵件之後。問題是數據不是以一種很好的方式來構造的,而且電子郵件是不可理解的。我嘗試使用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("[email protected]"); 

       MailAddress from = new MailAddress("[email protected]"); 

       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); 
      } 
     } 
    } 
} 
+2

我建議你看看你的代碼生成的HTML文本。您會注意到您不會創建有效的HTML表格,更不用說HTML頁面。唯一相關的行是'string html = ...',你可以從帖子中刪除剩下的代碼 –

+0

你的代碼甚至沒有構建,請先修改它。 –

+0

好吧好吧讓我安排它 – lol

回答

0

第一個代碼,以查明您的問題,只是看在生成的HTML和喜歡,你可以在你的代碼生成它檢測到的問題。你可以做的是首先用HTML設計郵件,當它看起來不錯時,編寫你的代碼來實現它。

閱讀代碼中加載的HTML模板(作爲嵌入式資源)並使用佔位符代替自定義數據更容易 - 而不是在代碼中構建HTML - 因爲像這樣將視圖(HTML)與邏輯。

請注意,格式化郵件是一項艱鉅的任務,因爲您必須考慮各種設備和郵件客戶端。如果你希望它們能夠很好地展示在所有這些設備上,那麼你最好使用像Zurb Ink這樣的框架,而不是自己做所有事情 - 這給你最好的機會來結束在大多數設備和客戶端上工作的響應電子郵件。

+0

所以我更新了它,表格正在形成,但現在我有一個問題。我需要從數據庫中的4列到他們意味着不在一列中的所有數據的列中。基本上我不知道如何在一個列下輸入數據 – lol

+0

你的意思是你不知道HTML? –