【问题标题】:Get information from newly arrived mail从新到的邮件中获取信息
【发布时间】:2013-12-28 06:16:14
【问题描述】:

我正在开发一个 VBA 程序,它将在 Outlook 中为新到达的电子邮件触发。 (标准在 Outlook 的“规则和警报”中设置。)

电子邮件应该有:-

“主题”字段包括:“WO_name/Task_name”

“Body”的第一行包括:“operation”

“String_1”、“String_2”、“String_3”和发件人的电子邮件地址将被输入一个批处理文件(总共 4 个参数)

这是我的代码:

Sub ChangeSubjectThenSend(Item As Outlook.MailItem)

WO = readCommand(Item.Subject, 1)
Task = readCommand(Item.Subject, 2)

Dim olItem As Outlook.MailItem
Dim sText As String
For Each olItem In Application.ActiveExplorer.Selection
    sText = olItem.Body
Next olItem

Shell ("C:\warehouse\WO\checkInOutTask\taskOperations.bat " & WO & " " & Task & " " & Item.SenderEmailAddress & " " & sText), vbNormalFocus

End Sub

Public Function readCommand(str As String, position As Integer) As String
Dim Tempstr() As String
If position >= 1 Then
Tempstr = Split(str, "/")
readCommand = Tempstr(position - 1)
End If

End Function

它提供当前在 Outlook 中选择的电子邮件条目的内容,而不是新到达的电子邮件。

如何让脚本针对新收到的电子邮件运行?

【问题讨论】:

  • 您希望您的代码在每次收到新邮件时运行?那么你应该考虑使用ThisOutlookSession 事件。你会在那里看到Inbox Add Item 事件。

标签: vba outlook


【解决方案1】:

当您打开 Outlook Visual Basic 编辑器时,您将看到的最小项目资源管理器类似于:

如果您对“Project1 (VbaProject.OTM)”单击加号,它将扩展为:

您的初始视图很可能是已经展开的表单(如果有)和模块。但“Microsoft Office Outlook 对象”可能不会扩展。点击它的加号得到:

点击“ThisOutlookSession”选中它,你会得到:

“ThisOutlookSession”就像一个模块,但它有额外的权限。特别是,您可以在此处指定事件例程。你的将是空的,但在这里你可以看到我为你创建的代码。

Private Sub Application_MAPILogonComplete() 在登录过程完成时被调用。我已经包含了初始化Public WithEvents MyNewItems As Outlook.Items 的代码。由于这种初始化,每次将新项目添加到收件箱时都会调用Private Sub myNewItems_ItemAdd(ByVal Item As Object)。我的代码只是在即时窗口中显示新项目的主题,但是,如果您将我的代码替换为您的代码,您应该能够获得您想要的效果。

将以下代码添加到您的“ThisOutlookSession”中,然后退出并重新进入 Outlook。无论如何,您可能会收到足够多的新电子邮件,但如果没有,请给自己发送一些电子邮件。

Option Explicit
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_MAPILogonComplete()

  Dim NS As NameSpace

  Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")

  With NS
    Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
  End With

End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)

  With Item
    Debug.Print "Item added to Inbox with Subject: " & .Subject
  End With

End Sub

【讨论】:

    【解决方案2】:

    要将代码应用于新到达的邮件,请不要选择任何内容。

    改为使用Item 传入(Item As MailItem)

    Option Explicit
    
    Sub ChangeSubjectThenSend(Item As MailItem)
    
    WO = readCommand(Item.subject, 1)
    Task = readCommand(Item.subject, 2)
    
    Dim sText As String
    sText = Item.body
    
    Shell ("C:\warehouse\WO\checkInOutTask\taskOperations.bat " & WO & " " & Task & " " & Item.SenderEmailAddress & " " & sText), vbNormalFocus
    
    End Sub
    
    
    Public Function readCommand(str As String, position As Long) As String
    
    Dim Tempstr() As String
    
    If position >= 1 Then
        Tempstr = Split(str, "/")
        readCommand = Tempstr(position - 1)
    End If
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 2022-01-19
      • 2016-10-21
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多