VB.Net,独特地发送电子邮件

时间:2015-11-18 14:28:56

标签: vb.net

我是一家包装公司的实习生,我们有一个界面,可以在星期一向几个人发送摘要电子邮件。代码中有大约70个组。每个组都有一个人们输入登录的特定部分。如果您是星期一在该组中的收件人,您将收到为您所在的组输入的所有活动日志的摘要电子邮件。如果用户A在第1组和第2组中,他或她应该收到2封电子邮件,其中包含对这2组的活动日志。问题是他或她在所有70个组中注册,如果组1和组2中只有2个活动日志,则她收到70个相同的电子邮件,其中包含这两个组的活动日志的摘要。这是代码。

 Private Sub SendEmails()
    Try

        Dim message As New PCA.Core.Messaging.Message(PCA.Core.Messaging.MessageTypes.JumperLog)
        'Dim distLists As List(Of PCA.Core.DistributionList) = (From r In Trident.Core.Globals.TridentApp.ApplicationCache.DistributionLists.DistributionLists Where r.ID.Contains("JL_")).ToList
        Dim distLists As List(Of PCA.Core.DistributionList) = (From r In PCA.Core.DistributionList.GetDistributionLists Where r.Id.Contains("JL_")).ToList

        For Each distlist As PCA.Core.DistributionList In distLists
            Dim recipients As System.Collections.Generic.List(Of Trident.Core.User)
            recipients = Trident.Core.Core.Message.GetTridentDistributionList("TRIMAINT", distlist.Id)

            If recipients.Count > 0 Then
                message.Recipients.AddRange(recipients)
            End If

        Next

        If message.Recipients.Count = 0 Then Exit Sub

        Dim ds As New DataSet
        Dim dbConn As New Trident.Core.DBConnection
        Dim sql As String = "SELECT * FROM ***.Maintenance.JumperLogs WHERE Removed <> 1 AND Plant = @Plant ORDER BY InstallDate "
        dbConn("@Plant") = Trident.Core.Globals.TridentApp.DefaultPlant.Plant

        Dim tmpJL As Trident.Objects.Maintenance.JumperLogs.JumperLog
        message.Subject = "Jumper Log - Active Jumpers"
        ds = dbConn.FillDataSet(sql)
        If ds.Tables(0).Rows.Count = 0 Then Exit Sub
        For Each dr As DataRow In ds.Tables(0).Rows
            tmpJL = New Trident.Objects.Maintenance.JumperLogs.JumperLog(dr)

            message.Body += "Jumper Log # " & tmpJL.LogId & " - Installed: " & tmpJL.InstallDate & vbCrLf

            message.Body += "Mill: " & Trident.Core.Globals.TridentApp.DefaultPlant.Description & vbCrLf
            message.Body += "Facility: " & tmpJL.FacilityObject.Description & vbCrLf
            If Not tmpJL.MachineAreaObject Is Nothing Then
                message.Body += "Area: " & tmpJL.MachineAreaObject.Description & vbCrLf
            End If
            If Not tmpJL.LocationObject Is Nothing Then
                message.Body += "Location: " & tmpJL.LocationObject.Description & vbCrLf
            End If
            If Not tmpJL.EquipmentObject Is Nothing Then
                message.Body += "Equipment: " & tmpJL.EquipmentObject.Description & vbCrLf
            End If

            message.Body += "Installed  By: " & tmpJL.InstalledBy.FullName & vbCrLf
            'message.Body += "Install Date: " & tmpJL.InstallDate & vbCrLf
            message.Body += "Tag: " & tmpJL.Tag & vbCrLf
            message.Body += "Tag Attached To: " & tmpJL.TagAttachedTo & vbCrLf
            message.Body += "Work Order: " & tmpJL.WorkOrder & vbCrLf
            message.Body += vbCrLf
            message.Body += "Reason: " & tmpJL.Reasons.ToUpper & vbCrLf
            message.Body += vbCrLf
            message.Body += "---------------------------------------------------------------------------------------------------------------------------------------------------" & vbCrLf
            message.Body += vbCrLf


        Next

        message.Send()


    Catch ex As Exception
        Throw New PCA.Core.Exceptions.PCAErrorException(ex)
    End Try

End Sub

现在我认为修改初始化范围的if语句可能会这样做吗?

确定“JL_001”组中的用户在星期一收到了一份摘要电子邮件,其中JL_001组是由设施标记的,这个被称为#1paper machine“因为。他只在一个组中造纸机组他收到一封电子邮件,其中只有一个活跃的跳线日志恰好来自他的工厂(#1纸机。)现在这是问题,有一组用户已全部添加到组“JL_001到JL_070”因为在星期一的前一周只输入了一个acitve日志,所以他们只应该收到一封摘要电子邮件,因为他们也在#1纸机设施组(JL_001)中。他们不应该收到任何其他组的任何其他内容,因为没有来自这些群组的活动日志,但他们收到了70条发送给JL_001的相同摘要的电子邮件。这有助于清除它吗?

1 个答案:

答案 0 :(得分:0)

您应该为每个收件人构建邮件正文,然后按收件人而不是组发送邮件。您可以按照以下步骤执行此操作:

  1. 创建全局收件人列表
  2. 获取群组收件人列表
  3. 循环显示收件人列表。如果收件人已存在,请将其他邮件正文附加到其记录中。如果没有,请在全局列表中创建一条新记录。
  4. 重复步骤2-3到所有组。
  5. 遍历全局收件人列表,并为每个收件人发送一封邮件。
相关问题