我的情况:
我正在尝试在Outlook未打开时发送电子邮件。如果Outlook正在运行,此代码将起作用。如果Outlook已关闭,则代码将创建一个不可见的进程,您可以在任务管理器中看到该进程。
代码在.Send
期间遇到错误。它返回运行时错误287.
根据我的经验,某些VBA方法仅在对象可见或活动时才有效。
我的工作是在致电.Display(False)
之前使用.Send
。
调用.Send
后,它会立即终止Outlook进程。 (请指出正确的方向。)然后电子邮件卡在发件箱中。
我必须通过调用另一个CreateObject("Outlook.Application")
并循环通过发件箱While Outbox.Items.Count > 0
或
循环SyncObjects
并手动呼叫.Start
以在发件箱上运行发送/接收。
我的问题:
有没有办法直接使用.Send
方法而不是使用解决方法,同时也无需打开Outlook。
我的代码:
Sub emailer()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "f@r.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Hi there"
.Send 'or use .Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
答案 0 :(得分:2)
可以通过更改发送/接收的设置来解决Outlook关闭的.send问题的解决方法。转到文件 - >选项 - >高级 - >找到Send/Receive...
并按下它。在“为群组设置”下,“所有帐户”是Perform an automatic send/receive when exiting
的复选框。请选中此选项,它可以解决“卡在您遇到的发件箱问题”。
以下是截图:
尝试一下,希望它有所帮助。
答案 1 :(得分:0)
使用Namespace.SendAndReceive
。请记住,发送/接收是异步的,您需要完成同步。您可以使用Namespace.SyncObjects
集合,使用SyncObject.Start
开始同步,然后等待SyncObject.SyncEnd
事件。
要阻止Outlook关闭,您需要保持对Outlook资源管理器或Inspector对象的实时引用。您可以使用Namespace.GetDefaultFolder
检索收件箱文件夹,然后使用MAPIFolder.GetExplorer
方法获取指向Explorer对象的指针。
<强>更新强>:
您可能还希望确保在创建和发送邮件之前登录到MAPI配置文件。在CreateObject行之后,尝试添加以下
set NS = OutApp.GetNamespace("MAPI")
NS.Logon