0

如果告诉如何,我可以附上我在这个问题中谈到的电子邮件。

我需要监视我的 Outlook 收件箱中是否有两封特定的电子邮件。每天晚上 7 点到达。另一个在晚上 7:20 到达(两边都花几分钟)。

第一个电子邮件主题:“Automatic1 08092013”​​。Automatic1 这个词总是相同的,数字代表日期。

第二封电子邮件主题:“Automatic2 - 2013 年 8 月 9 日”。Automatic2 始终相同,但日期会发生变化。

Automatic1 的电子邮件正文包含一个字符串,其值表示货币。

晚上 7 点 EmailBody 示例:CustomerCount:11 VisitorNumber:121 Amount:811070

与第二封电子邮件中的值相比,我需要 CustomerCount、VisitorNumber 和 Amount:811070。金额“811070”表示等于 $8,110.70 的货币价值。

如果值不匹配,则在 7:20 电子邮件到达后向我发送警报电子邮件。

这是棘手的部分。晚上 7:20 的电子邮件的值包含在多个表中。

晚上 7:20 电子邮件正文的示例:

(这是表 #1,它包含 2 行和 2 列)

Process1 Totals(这是出现在第一个表格上方的电子邮件正文中的字符串文本)

计数1...金额1

11.............8110.70

(这是表 #2,它包含 3 行和 2 列)

Process2 Totals(这是出现在第二个表格上方的电子邮件正文中的字符串文本)

计数2 ..金额2

121........811070

(这是表#3,它包含一堆我不关心的东西)

分解

身份证号码 Amt ID2

296 15 737.33 0000113821

079 1 737.33 000938

34 1 737.33 0007000

746 10 737.33 0056200

741 8 737.33 0009733

089 6 737.33 0034664

636 1 737.33 007500

07 71 737.33 0000976

296 14 737.33 0023231

34 51 737.33 0000100

788 23 737.33 7100

场景:

如果 7:20 的电子邮件到达并且晚上 7 点的电子邮件不存在(从同一日期开始),请发送带有“警告文本”的电子邮件警报。

如果 7:20 的电子邮件到达并且晚上 7 点的电子邮件确实存在(重要:从同一日期开始),比较

客户数:11

晚上 7:20 发送电子邮件表 1 Count1 值包含在第 1 列第 2 行中

计数1 金额1 11 8110.70

如果他们不匹配发送电子邮件与“客户计数不相等”

此外,比较晚上 7 点访客人数:121

表 2 Count2 值包含在第 1 列第 2 行中

计数2 金额2 121 811070

如果他们不匹配发送带有“VisitorNumber not equal”的电子邮件

另外,比较晚上 7 点数量:811070

Table2 Amount2(见上文)值包含在第 2 列第 2 行中

如果不匹配,请发送带有“金额不匹配”的电子邮件

每封电子邮件都应包含确定存在问题所涉及的实际数学。每封电子邮件都应包含所有数字。当涉及到货币时,电子邮件正文中包含的两者之间应该存在差异。该值返回正数还是负数都没有关系。我不必为每个问题提供单独的电子邮件。只要包含与货币的所有比较和差异,只需一封电子邮件即可。如果 7:20 的电子邮件没有收到(没关系)和/或数字都匹配并且没有差异,则根本不会发送任何电子邮件。

例子:

主题:警报

电子邮件正文:“每晚总数不匹配”

您的客户数 = 11

原始收件人客户数 = 12

已知问题:

由于某种原因,晚上 7:20 电子邮件中的单元格包含空格。

晚上 7 点的电子邮件是一长串。

我对它应该如何工作的看法。

需要监控收件箱中 7:20 电子邮件的主题行。

当 7:20 的电子邮件进入我的收件箱时,在我的收件箱中搜索晚上 7 点的电子邮件,按主题搜索。

如果存在晚上 7 点的电子邮件,则从每封电子邮件中获取值,比较并决定是否需要发送警报电子邮件。(过于简化)

我宁愿不涉及excel,但了解是否需要。

4

1 回答 1

0

我想您要的是 Outlook VBA 代码。这听起来像是可能的事情,因为我自己编写了 Outlook VBA 来对用户执行基本的 Active Directory 操作(解锁、更改/重置密码)——我向自己发送带有用户名和说明的电子邮件,然后几秒钟后结果将通过电子邮件发送给我。

请注意,即使使用完整的 VBA 代码,您也需要设置 Outlook 规则来运行 VBA 代码,并且您必须打开 Outlook 会话,因为它无法在服务器中完成。这也意味着您需要一台运行 Outlook 24/7 的计算机来完成此操作。

如果无法测试实际的 .msg 文件,则无法生成完整的 VBA 代码。

但是让你开始的东西......(尚未完全测试)

Private Const sLookUp = "Automatic1 "

Public Sub Rules_Automatic2(oMailAuto2 As MailItem)
    Dim sDate As Date, oMailAuto1 As MailItem, sSubject As String, sBody As String

    ' Exit if "Automatic2" is NOT the first word in subject
    If InStr(1, Left(oMailAuto2.Subject, 10), "Automatic2", vbTextCompare) = 0 Then Exit Sub
    ' Get the date value in subject and get the corresponding Automatic1 mail item
    sDate = DateValue(Split(oMailAuto2.Subject, "-"))
    oMailAuto1 = GetAuto1Email(sLookUp & Format(sDate, "mmddyyyy"))

    If oMailAuto1 Is Nothing Then
        ' corresponding Automatic1 email not found
        sSubject = "Warning Text"
        sBody = "Corresponding email for """ & oMailAuto2.Subject & """ is not found!"
        SendEmail sSubject, sBody
    Else
        CompareAutomatics oMailAuto2, oMailAuto1
    End If
End Sub

Private Function GetAuto1Email(sTxt As String) As MailItem
    Dim oOlkFDR As Outlook.Folder, oMail As MailItem, oMailAuto1 As MailItem

    Set oMailAuto1 = Nothing
    Set oOlkFDR = Application.Session.GetDefaultFolder(olFolderInbox)
    For Each oMail In oOlkFDR.Items
        If InStr(1, oMail.Subject, sTxt, vbTextCompare) Then
            Set oMailAuto1 = oMail
            Exit For
        End If
    Next
    GetAuto1Email = oMailAuto1
End Function

Private Sub CompareAutomatics(oMailAuto2 As MailItem, oMailAuto1 As MailItem)
    Dim sBody2 As String, sBody1 As String, sSubject As String, sReply As String

    sBody2 = oMailAuto2.Body
    sBody1 = oMailAuto1.Body
    sSubject = ""
    sReply = ""
    ' Do Comparisons and setup email body and subject
    ' ...
    ' ...
    SendEmail sSubject, sReply
End Sub

Private Sub SendEmail(sSubject As String, sBody As String)
    Dim oMail As MailItem

    Set oMail = Application.CreateItem(olMailItem)
    With oMail
        .Subject = sSubject
        .BodyFormat = olFormatPlain
        .Body = sBody
        .Send
    End With
    Set oMail = Nothing
End Sub

希望您了解 Outlook VBA 中的工作原理...

于 2013-08-12T01:55:18.677 回答