2017-07-06 95 views
2

我的情况:发送邮件时的Outlook尚未打开

我试图发送电子邮件在Outlook未打开。如果Outlook正在运行,此代码将起作用。如果Outlook关闭,代码将创建一个不可见的进程,您可以在任务管理器中看到该进程。

代码在.Send期间遇到错误。它返回运行时错误287.

从我的经验来看,某些VBA方法只有在对象可见或活动时才起作用。

我的工作是在拨打.Send之前使用.Display(False)

调用.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 = "[email protected]" 
    .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

尝试把“虽然Outbox.Items.Count> 0”循环到你的代码中的“结束与”行之后 – jsotola

回答

0

使用Namespace.SendAndReceive。请记住,发送/接收是异步的,你需要WEIT的同步完成,你可以使用Namespace.SyncObjects集合,开始使用SyncObject.Start同步,然后等待SyncObject.SyncEnd事件。

为防止Outlook关闭,您需要保留对Outlook Explorer或Inspector对象的实时引用。您可以使用Namespace.GetDefaultFolder检索收件箱文件夹,然后使用MAPIFolder.GetExplorer方法获取指向Explorer对象的指针。

UPDATE

您可能还需要确保你登录到MAPI配置文件创建和发送邮件之前。在创建对象行后,尝试添加以下

set NS = OutApp.GetNamespace("MAPI") 
NS.Logon 
+0

你知道为什么'.Send'不想在没有资源管理器对象的情况下工作吗? – fcsr

+0

由于Outlook在有机会执行发送/接收之前退出。 –

+0

我不认为这是原因。尝试执行时发送。我仍然可以在资源监视器中看到Outlook.exe runnning – fcsr

2

一种与Outlook收的问题。发送可以解决方法可能通过更改设置发送解决/接收。转到文件 - >选项 - >高级 - >找到Send/Receive...并按下它。在“设置组‘所有帐户’是Perform an automatic send/receive when exiting复选框选中此,它可能会解决的。‘卡在你有’发件箱中的问题

下面是截图:

试试这个,希望这有助于。

+0

喜@Busse感谢,但它只是变得如果我使用'.Display'和'.Send'组合卡住了。 我想要一个简单的'。发送'。如果我只使用'.Send',我得到一个运行时错误287 – fcsr

+0

啊,对不起。你怎么调用这个脚本? Outlook已关闭,您调用此脚本,它会创建一个新的邮件项目并尝试发送。由于它正在打开它应该发送的进程。我在某处读到这可能是一个计时事件,表明它试图发送得太快,所以他们在发送之前增加了1秒的延迟。 – Busse

+0

我在Excel中使用VBA,但我的程序真的在Python中。我正在使用暴露COM对象的'pywin32'库。所以就像在Python中运行VBA代码一样。我只是在VBA中创建了一个重复代码,以确保它不是Python的问题。 我试着使用F8来运行代码并在执行'.Send'行之前暂停很长时间,但它仍然无效。 我认为问题是我不能使用'。发送'当Outlook不可见。与Excel中的'.Paste'类似。如果目的地字段没有被激活,你不能使用它。 – fcsr