发送和保存指定邮件.不是感知事件侦听器



编辑:我只是要使用一个事件监听器。我会删除这篇文章,但也许有人会找到一种非eventlistener的方式来保存已发送的邮件,然后再将其发送到已发送的邮件收件箱中。

问题:Outlook在宏完成之前不会接收VBA发送的电子邮件。如果我使用wait, sleep, while循环或其他方法,电子邮件将不会收到。我不能使用Sent Items事件监听器,因为我只想将特定的电子邮件保存到文件夹中,而不是全部。我个人知道如何从发送的项目中保存,我知道如何发送消息。问题是用VBA发送电子邮件和它出现在我的发送项目框之间的延迟。如果我在等待之前保存,保存的电子邮件是之前的电子邮件,但如果你尝试等待,发送的项目文件夹永远不会更新。任何想法或简单的解决方案。我可能只是笨。

我读了每个论坛,但还没有找到解决方案,我在另一家公司运行,但不再记得如何。我使用宏来发送非常具体的电子邮件和执行许多其他任务。然后,我想抓住我刚刚发送的电子邮件,并将其保存到使用vba的文件夹。问题是接收我的"已发送项目"中的邮件。文件夹被延迟。如果我尝试捕获它或等待接收它,我的代码永远不会完成。我在论坛上看到的所有解决方案都是一个发送项目侦听器/收件箱事件侦听器,但我不需要,我知道哪些电子邮件可以触发它。

无论如何,您需要等待一些事件触发,可能是Sent Items文件夹上的Items.ItemAdd,或者SyncObject上的SyncObject.SyncEnd-消息提交是异步的,因此没有多少sleep或while循环可以帮助您。你不能只是停止你的VBA脚本,并在消息实际发送时恢复它,因为你的代码是在主Outlook线程上运行的-如果你的脚本暂停,Outlook也是如此。

您可以尝试使用命名空间。SendAndReceive方法,它启动当前会话中提交的所有未传递的消息的立即传递,并立即接收当前配置文件中所有帐户的邮件。注意,调用SendAndReceive方法是异步的。SendAndReceive提供了与Send/Receive All命令等效的编程命令,当您单击Tools然后单击Send/Receive时可用。

如果不需要同步所有对象,可以使用SyncObjects集合对象来选择特定的对象。有关详细信息,请参见NameSpace.SyncObjects

在你的VBA代码中,你也可以考虑使用DoEvents函数,它产生执行,以便操作系统可以处理其他事件。DoEvents将控制传递给操作系统。当操作系统处理完队列中的事件,并且SendKeys队列中的所有键都被发送(如果有的话)后,返回控制权。

DoEvents对于一些简单的事情非常有用,比如允许用户在进程启动后取消进程,例如搜索文件。

解决方案,不是过去使用的解决方案,而是我解决的。

  1. 基本上只是所有论坛中每个人建议的事件侦听器解决方案。我在我的Sent Items中创建了一个单独的文件夹,并使用myNameSpace。为VBA发送的项目设置该文件夹。我只把电子邮件发送到那个文件夹,我只把监听器添加到那个文件夹。这允许我分开发送的项目和这个特定的VBA发送的电子邮件,然后自动保存它们。我仍然在寻找一种方法来保存发送的邮件项目之前,发送的项目收件箱显示它,但我已经放弃了这一点。谢谢大家的帮助。如果我找到更好的答案,我会尝试将其与代码一起发布。

相关内容

  • 没有找到相关文章

最新更新