所以我刚用.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
但我无法弄清楚如何检查发件人 - 我到目前为止在网上找到的示例似乎遍历所有电子邮件,但我之后所知的是一种只返回收到的最后一封电子邮件的方法..
任何帮助表示赞赏!
答案 0 :(得分:0)
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
。