我们一直使用VBA代码使用Smtp服务发送电子邮件,但不知何故微软将其视为垃圾邮件并且无法再接收它。
因此,我们已开始使用 Outlook 应用程序发送电子邮件,而不是如本线程中所述(https://answers.microsoft.com/en-us/msoffice/forum/all/use-excel-vba-in-office-365 -发送自动-e/f6b2042b-a17e-4aa4-99ea-f647b82cc8fd?page=2).
这种方法的问题是必须打开/运行 Outlook。如果没有,他们只会坐在发件箱中等待我们打开 Outlook。这是预期的行为吗?VBA 中还有其他替代方案吗?
因此,我们已开始使用 Outlook 应用程序发送电子邮件,而不是如本线程中所述(https://answers.microsoft.com/en-us/msoffice/forum/all/use-excel-vba-in-office-365 -发送自动-e/f6b2042b-a17e-4aa4-99ea-f647b82cc8fd?page=2).
如果没有使用 CreateObject 打开,您可以创建一个 Outlook 实例 但我更喜欢用户在需要时打开 Outlook:
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Sub DoOutlookStuff()
If Not IsOutlookOpen Then Exit Sub
' Your code here
End Sub
Function IsOutlookOpen() As Boolean
Dim iHwnd As LongPtr, s As String
Const classout As String = "rctrl_renwnd32"
iHwnd = FindWindow(classout, s)
If iHwnd > 0 Then
IsOutlookOpen = True
Else
MsgBox "Please Open Outlook first"
End If
End Function