如何从VBA中的Outlook发件箱发送所有电子邮件

时间:2018-06-26 16:08:36

标签: excel vba excel-vba email outlook

我正在使用Excel VBA在Outlook中暂存电子邮件,并且运行良好。

Dim template As Outlook.MailItem, tomerge As Outlook.MailItem
' Create E-mail
tomerge.Close olSave

然后可以将电子邮件手动移动到“草稿”文件夹和sent using this Sub

'Loop through items in Drafts folder
objDrafts.Item(i).Send

但是,许多用户在“草稿”文件夹中有一堆不想发送的多余草稿。

如果我将“ olFolderDrafts”替换为“ olFolderOutbox”,并尝试从其发件箱发送邮件。发送第一个消息,然后出现“运行时错误”“ Outlook已经开始发送此消息”。

是否有某种方式可以从发件箱发送所有内容,或者有更好的方式来登台并从新创建的文件夹发送信息?

2 个答案:

答案 0 :(得分:0)

您需要为未发送的项目创建一个文件夹,并分别进行处理。通常,Outbox文件夹包含已提交的项目。因此,这不是您放置物品的合适位置。

Outlook对象模型提供了Folders类的Add函数。您可以使用Outlook中Folders类的Folders属性获得Folder类的实例。您可以在How To: Create a new folder in Outlook文章中了解有关此内容的更多信息。

答案 1 :(得分:0)

此答案的灵感来自于Nagarajan的上述评论,但是与Send/Receive in Outlook Via Code中的答案相比,有很多必要的更改。主要问题是使用olSave不会在Outlook中将邮件置于“准备发送”状态,因此,从以上答案中使用syc.Start开始同步将无济于事。

相反,我们发现以下过程很简单:

  1. 使用“发送/接收”->“脱机工作”将Outlook置于脱机模式
  2. 使用Excel VBA暂存电子邮件,而不是仅保存.Send每封电子邮件。由于Outlook处于脱机状态,因此它们将被暂存并准备发送,但实际上并未发送。
  3. 现在应该将电子邮件放在Outlook的“发件箱”文件夹中,并且可以进行审阅,只需确保在审阅/编辑邮件后确保按“发送”按钮,否则您修改的电子邮件将从队列中删除。 li>
  4. 准备好发送邮件后,将Outlook置于联机模式,它们将自动发送。