【问题标题】:Trigger .exe upon receiving email from sender收到发件人的邮件后触发 .exe
【发布时间】:2017-12-23 00:03:05
【问题描述】:

我用 .net 框架编写了一个 C# 应用程序。目的是从在线电子表格应用程序请求数据,用它做一些事情,然后发回更新的数据。

我认为触发 exe 的最佳方法是使用 webhooks/callbacks,但我认为这需要在具有外部 IP 地址的网络服务器上运行我的程序。

我希望应用程序在某些数据更改时向指定帐户发送电子邮件,而不是定期轮询电子表格应用程序。收到电子邮件后,VBA 代码会检查电子邮件是否来自应用程序,然后运行可执行文件。

在收到电子邮件时运行 exe:

Private Sub Application_NewMail()
 Dim path As String
 Dim shl As Variant
 path = "C:\Users\***\Desktop\SmartPlugin.exe"
 shl = Shell(path, 1)
End Sub

如何查看发件人?我在网上找到的示例循环遍历所有电子邮件,但我所追求的是返回最后收到的电子邮件的方法。

【问题讨论】:

    标签: c# vba api outlook


    【解决方案1】:

    改用Application.NewMailEx 事件——它将新消息的条目ID 作为参数传递。使用该条目 ID 调用 Application.Session.GetItemfromID

    【讨论】:

      【解决方案2】:

      搞定了。

      Private Sub Application_NewMail()
      
          Dim objN As NameSpace
          Dim objF As MAPIFolder
      
          Set objN = GetNamespace("MAPI")
          Set objF = objN.GetDefaultFolder(olFolderInbox)
          Set mlItems = objF.Items
          mlItems.Sort "CreationTime", True
          Set mlItem = mlItems.Item(1)
      
          Dim path As String
          Dim shl As Variant
          Dim sndString As String
          sndString = CStr(mlItem.SenderName)
          
          If InStr(1, sndString, "SmartSheet", vbTextCompare) > 0 Then
              path = "C:\Users\Alex Rose\Desktop\SmartPlugin.exe"
              shl = Shell(path, 1)
          End If
      End Sub
      

      【讨论】:

      • 如果您收到多封电子邮件,这将不起作用 - 您将继续收到相同的最新电子邮件,这可能不是刚刚到达的电子邮件 - 请参阅上面的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2011-10-24
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      相关资源
      最近更新 更多