根据发件人的电子邮件触发.exe

时间:2017-07-18 08:28:41

标签: c# vba api outlook

所以我刚用.net框架编写了我的第一个C#应用程序;它的目的是从在线电子表格应用程序请求数据,用它做任务,然后发回更新的数据。理想情况下,我认为触发exe的最佳方法是使用webhooks / callbacks,但我认为这需要在Web服务器上运行我的程序和外部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

但我无法弄清楚如何检查发件人 - 我到目前为止在网上找到的示例似乎遍历所有电子邮件,但我之后所知的是一种只返回收到的最后一封电子邮件的方法..

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

哈哈,草皮法!我发布了这个,大概5分钟就搞定了!如果其他人有同样的问题,或者可以提出更好的解决方案,我可以留下它:

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

答案 1 :(得分:0)

使用Application.NewMailEx事件 - 它将新消息的条目ID作为参数传递。使用该条目ID来呼叫Application.Session.GetItemfromID