我是一家包装公司的实习生,我们有一个界面,可以在星期一向几个人发送摘要电子邮件。代码中有大约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的相同摘要的电子邮件。这有助于清除它吗?
答案 0 :(得分:0)
您应该为每个收件人构建邮件正文,然后按收件人而不是组发送邮件。您可以按照以下步骤执行此操作: