【问题标题】:How to reference the mail which triggered the outlook macro?如何引用触发 Outlook 宏的邮件?
【发布时间】:2015-01-21 05:30:44
【问题描述】:

我正在设计一个 QTP 框架,自动化工程师在该框架中发送电子邮件以启动测试套件执行(可以使用 MS Outlook 安排电子邮件)

收到触发邮件后,应下载附件,并应使用 Outlook 宏的适当设置(自动)启动 QTP

但在上述情况下我想下载邮件的附件并将邮件移动到触发宏的不同文件夹。

有没有办法引用触发宏的邮件?

目前这就是我正在做的事情。

Sub TestSuiteInitialilzer(mail As Outlook.MailItem)
    Set ns = Application.GetNamespace("MAPI")
    Set Inbox = ns.GetDefaultFolder(olFolderInbox)
    Set objDestFolder = Inbox.Folders("RAN")
    FileName = "C:\Email Attachments\" & mail.Attachments.Item.FileName
    'Download the attachment
    Atmt.SaveAsFile FileName
    'Move the mail to another folder
    mail.Move objDestFolder
    launchQTP = "C:\Unlock.vbs"
    Set objShell = CreateObject("WScript.Shell")
    ‘Launch QTP
    objShell.Run launchQTP  
    objShell = Nothing
End Sub

【问题讨论】:

  • 您是如何设置触发器的?您很可能可以使用.EntryID 引用 Outlook 中的任何项目。如果您使用应用程序级事件触发器来执行宏,请阅读slipstick.com/developer/processing-incoming-e-mails-with-macros
  • 邮件是触发器。自动化工程师发送一封电子邮件以开始执行测试套件。邮件将有一个特定的主题,例如‘RunQTPMasterDriverScript’和一个包含测试脚本路径和运行指示器的附件。在 Outlook 中创建一个规则来监控收件箱并在主题为“RunQTPMasterDriverScript”的邮件到达时调用宏。宏应该下载附件,将邮件从一个文件夹移动到另一个文件夹。
  • 我希望宏下载附件并将邮件从一个文件夹移动到另一个文件夹。如何做到这一点?非常感谢任何形式的帮助。
  • 我的意图是如果我们可以直接引用触发宏的邮件,我们就不必通过收件箱的整个电子邮件集合来搜索具有特定主题“RunQTPMasterDriverScript”的邮件。我希望你明白我的意思。
  • 到目前为止,您在接收方的代码方面做了什么?接收方的事件是帕特里克要求的“触发器”。

标签: vba vbscript outlook qtp


【解决方案1】:

在匹配之前跳过检查整个收件箱的两个步骤。保留您的以防万一您需要为第一个匹配项手动运行它。

1) 在下面添加代码(改为使用 cscript.exe):

Sub TestSuiteInitialilzer_Rules(ByRef oMail As MailItem)
    Const FileName = "C:\Email Attachments\"
    For Each Atmt In oMail.Attachments
        'Download the attachment
        Atmt.SaveAsFile FileName & Atmt.Filename
    Next Atmt
    ' Move the Mail to objDestFolder
    oMail.Move objDestFolder
    'launchQTP = "C:\Unlock.vbs"
    launchQTP = "cscript.exe //nologo C:\Unlock.vbs"
    Set objShell = CreateObject("WScript.Shell")
    'QTP will be launched with the neccassary configurations through the vb script
    objShell.Run launchQTP
    Set objShell = Nothing
End Sub

2) 在现有规则之上添加 Outlook 规则(对我收到的消息应用规则)。最好关闭现有的。

【讨论】:

  • 非常感谢您的回复!为什么我们需要 cscript?我们不能通过宏使用 WShell 对象的 VBS 文件吗?每当我尝试运行代码时,VBA 都会告诉我创建一个新宏。我猜这是由于传递的参数而发生的。你知道这里出了什么问题吗?
  • 由于我不知道 vbs 文件中的内容,如果它曾经使用过 wscript.echo,cscript 将显示它并让代码运行。但是,wscript 将暂停,直到按下 OK。您不能有 2 个同名的 Subs。将“_Rule”添加到新规则中。
  • 好的。当 Outlook 重新启动或自动关联时,我可以做些什么来将宏与规则关联(并激活规则)?
  • 一旦您设置了 Outlook 规则,它将被激活,直到 Outlook 确定宏有错误。
  • 再问一个问题,知道如何指向个人文件夹下的“收件箱”吗?邮箱 - Jai dev - 已删除项目 - 草稿 - 收件箱 - 垃圾邮件 - 发件箱 - 已发送项目 个人文件夹 - 已删除项目 - 草稿 - 收件箱 - 垃圾邮件 - 发件箱 - 已发送项目 邮箱 - 账单工作 - 已删除项目 - 草稿 - 收件箱 - 垃圾邮件-发件箱 -已发送项目
【解决方案2】:

您只需要定义一个接受 MailItem 作为参数的 VBA 宏子。源对象将传递给子对象,您无需在收件箱文件夹中搜索它。例如:

Public Sub Text(mail as Outlook.MailItem)
    ' do something with the mail object
End Sub

您可以使用 MailItem 类的 Attachments 属性访问附件。 Move 方法允许将项目移动到另一个文件夹。

【讨论】:

  • 作为 Outlook.MailItem 的邮件 - 在此语句中,“邮件”是指触发宏的邮件项吗?
  • 非常感谢您的回复!我已经在描述中给出了我目前正在使用的代码,但我不知道它是否工作正常!每当我尝试运行代码时,VBA 都会告诉我创建一个新宏。我猜这是由于传递的参数而发生的。你知道这里出了什么问题吗?
猜你喜欢
  • 2015-02-20
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多