【问题标题】:Add different table in one email在一封电子邮件中添加不同的表格
【发布时间】:2017-02-06 00:54:02
【问题描述】:

我有一个自动调用电子邮件的系统。 我想做的是当今天是星期五的系统陷阱时我想创建一个 一封电子邮件中的不同表格。

到目前为止,我的系统每天可以调用一封电子邮件。

这就是我想要实现的目标。

例如今天是星期一 系统将发送:

“周二餐桌到期产品清单”(与周二至周四相同)

星期二 - “星期三到期产品清单”

星期三 - “星期四到期产品列表”

星期四 - “星期五到期产品列表”

如果当天是星期五,我想通过电子邮件发送 3 天的到期产品列表,如下所示:

以下是周六至周一到期的产品列表。 (每天只在一封电子邮件中提供不同的表格)像这样:

下面是的过期产品列表。

到目前为止,我的系统可以每天发送电子邮件。我不知道我将如何实现 星期五电子邮件爆炸的输出。

这是我目前所拥有的:

我创建了两个不同的子类。我的一个子类是周一至周四的电子邮件设置 另一个是周五的电子邮件设置,由 3 天不同的表格组成。

Sub EmailMondayThursday

Dim ds As New DataSet
    Dim cmd As New SqlCommand
    Dim dt As New DataTable
    Dim adp As New SqlDataAdapter
    Dim c As New SqlConnection("myconnectionhere")
    Dim emaildate As String
emaildate = DateTime.Today.AddDays(1).Date.ToString("D")
    cmd.Connection = c
    cmd.CommandText = "sp_progspot_monitor"
    cmd.Parameters.AddWithValue("@prdname", "%")
    cmd.Parameters.AddWithValue("@prdcde", "%")
    cmd.Parameters.AddWithValue("@prdfrdate", Date.Today.AddDays(1))
    cmd.Parameters.AddWithValue("@prdtodate", Date.Today.AddDays(1))
    cmd.Parameters.AddWithValue("@cost", "%")
    cmd.CommandType = CommandType.StoredProcedure
    adp.SelectCommand = cmd
    adp.Fill(ds)

Dim dv As New DataView(ds.Tables(0))
    Dim dvfilter As DataTable = dv.ToTable(True, {"teledte"})
    Dim dt2 As New DataTable
    For Each dtrow As DataRow In dvfilter.Rows
        dv.RowFilter = "Total_Load < Potential_Load"
        dt2 = dv.ToTable(False, {"Date", "Prouduct Name", "Product Code",  "Total Sales"})
    Next

Dim builder As New StringBuilder
builder.Append("<!DOCTYPE html><html>")
builder.Append("<head></head>") 
builder.Append("<table>")   
builder.Append("<tr>")
builder.Append("<th>Date</th>")
builder.Append("<th>Product Name</th>")
    builder.Append("<th>Product Code</th>")
    builder.Append("<th>Total Sales</th>")
builder.Append("<tr>")  
builder.Append("</table>")  
builder.Append("</html>")
 For Each row As DataRow In dt2.Rows
        builder.Append("<tr>")
        Dim i As Integer
        i = 1
        For Each col As DataColumn In dt2.Columns
            builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>")
            i = i + 1
        Next
        builder.Append("</tr>")
        builder.AppendLine()
    Next
builder.Append("</tbody>")
    builder.Append("</table>")
setemail("myemail@yahoo.com", "pass", builder.ToString)

结束子

这是我的 FridayEmail 子类

Dim ds As New DataSet
        Dim cmd As New SqlCommand
        Dim dt As New DataTable
        Dim adp As New SqlDataAdapter
        Dim c As New SqlConnection("myconnectionhere")
        Dim emaildtefrm As String
    dim emaildteto as String
    emaildtefrm = DateTime.Today.AddDays(1).Date.ToString("D")
    emaildteto = DateTime.Today.AddDays(3).Date.ToString("D")        
    cmd.Connection = c
        cmd.CommandText = "sp_progspot_monitor"
        cmd.Parameters.AddWithValue("@prdname", "%")
        cmd.Parameters.AddWithValue("@prdcde", "%")
        cmd.Parameters.AddWithValue("@prdfrdate", Date.Today.AddDays(1))
        cmd.Parameters.AddWithValue("@prdtodate", Date.Today.AddDays(3))
        cmd.Parameters.AddWithValue("@cost", "%")
        cmd.CommandType = CommandType.StoredProcedure
        adp.SelectCommand = cmd
        adp.Fill(ds)

    Dim dv As New DataView(ds.Tables(0))
        Dim dvfilter As DataTable = dv.ToTable(True, {"teledte"})
        Dim dt2 As New DataTable
        For Each dtrow As DataRow In dvfilter.Rows
            dv.RowFilter = "Total_Load < Potential_Load"
            dt2 = dv.ToTable(False, {"Date", "Prouduct Name", "Product Code",  "Total Sales"})
        Next

    Dim builder As New StringBuilder
    builder.Append("<!DOCTYPE html><html>")
    builder.Append("<head></head>") 
    builder.Append("<body>")
    builder.Append("<p> Below is the list of expiry product from " & emaildtefrm & "to" & emaildteto &  "</p>")
    builder.Append("<table>")   
    builder.Append("<tr>")
    builder.Append("<th>Date</th>")
    builder.Append("<th>Product Name</th>")
        builder.Append("<th>Product Code</th>")
        builder.Append("<th>Total Sales</th>")
    builder.Append("<tr>")  
    builder.Append("</table>")  
    builder.Append("</html>")
     For Each row As DataRow In dt2.Rows
            builder.Append("<tr>")
            Dim i As Integer
            i = 1
            For Each col As DataColumn In dt2.Columns
                builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>")
                i = i + 1
            Next
            builder.Append("</tr>")
            builder.AppendLine()
        Next
    builder.Append("</tbody>")
        builder.Append("</table>")
    setemail("myemail@yahoo.com", "pass", builder.ToString)

此代码用于捕获今天的日期,以便当系统知道这一天时,它会根据条件有条件地发送电子邮件。

Protected Sub ImageButton1_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) 处理 ImageButton1.Click

    Dim daytoday As String = DateTime.Today.DayOfWeek

    If daytoday.ToString = "1" or Then
        EmailMondayThursday()
    ElseIf daytoday.ToString = "4" Then
        MsgBox("Thursday")

    ElseIf daytoday .ToString = "5" Then
    ProgSpotEmailFriday()
    End If

End Sub

Subclass FridayEmail 的问题输出如下:

我想要实现的是如下所示

【问题讨论】:

    标签: html asp.net vb.net outlook


    【解决方案1】:

    您星期五的输出包含在单个数据表中,并且您对其进行迭代,这就是您将其作为单个表的原因。 您需要有 3 个表,每天一个,或者将其作为单个数据表,但按日期对产品进行分组以获得 3 个组,而不是遍历数据表行并将 HTML 行附加到 HTML ,将此代码放在另一个遍历组的for循环中,并在for循环中创建一个HTML表,所以代码应该是这样的,我不知道VB

    Dim dv As New DataView(ds.Tables(0)) 将 dvfilter 调暗为 DataTable = dv.ToTable(True, {"teledte"}) 将 dt2 调暗为新数据表 对于 dvfilter.Rows 中的每个 dtrow 作为 DataRow dv.RowFilter = "Total_Load

    Dim builder As New StringBuilder
    builder.Append("<!DOCTYPE html><html>")
    builder.Append("<head></head>") 
    builder.Append("<body>")
    builder.Append("<p> Below is the list of expiry product from " & emaildtefrm & "to" & emaildteto &  "</p>")
    
    For Each from emaildtefrm  to emaildteto 
    
    builder.Append("<table>")   
    builder.Append("<tr>")
    builder.Append("<th>Date</th>")
    builder.Append("<th>Product Name</th>")
        builder.Append("<th>Product Code</th>")
        builder.Append("<th>Total Sales</th>")
    builder.Append("<tr>")  
    builder.Append("</table>")  
    builder.Append("</html>")
    dim dayProducts as DataTable  = dt2.Select(get only products for this day)
     For Each row As DataRow In dayProducts .Rows
            builder.Append("<tr>")
            Dim i As Integer
            i = 1
            For Each col As DataColumn In dt2.Columns
                builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>")
                i = i + 1
            Next
            builder.Append("</tr>")
            builder.AppendLine()
            Next
           builder.Append("</tbody>")
           builder.Append("</table>")
     Next
     builder.Append("</body>")
    
    
    setemail("myemail@yahoo.com", "pass", builder.ToString)
    

    【讨论】:

    • 抱歉,您的回答充满了错误。我也不明白。我很抱歉。我仍然会尝试你给出的逻辑。谢谢。
    • 是的,这就是为什么我说我不懂VB,但想法是画3个表而不是一个,所以在你得到产品的数据表后,将它们分成3个表格,并为每个表格构建一个 HTML 表格并将其附加到最终的电子邮件正文中
    • 是的,这就是我在发布我的问题之前想要做的。仍然混淆我如何实现这种输出。我真的不知道从哪里开始:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2015-09-24
    • 2018-12-04
    • 2012-05-03
    相关资源
    最近更新 更多