Note: The other languages of the website are Google-translated. Back to English

如何在Outlook中一次发送多个草稿?

现在,如果您的“草稿”文件夹中有多条草稿消息,则希望一次发送一次,而不是一一发送。 您如何在Outlook中快速轻松地处理这项工作?

使用VBA代码一次在Outlook中发送所有草稿邮件


使用VBA代码一次在Outlook中发送所有草稿邮件

以下VBA代码可以帮助您立即从“草稿”文件夹发送所有或选定的草稿电子邮件,请这样做:

1。 按住 ALT + F11 键打开 Microsoft Visual Basic应用程序 窗口。

2。 然后点击 插页 > 模块,将以下代码复制并粘贴到打开的空白模块中,请参见屏幕截图:

VBA代码:在Outlook中一次发送所有草稿电子邮件:

Sub SendAllDraftEmails()
Dim xAccount As Account
Dim xDraftFld As Folder
Dim xItemCount As Integer
Dim xCount As Integer
Dim xDraftsItems As Outlook.Items
Dim xPromptStr As String
Dim xYesOrNo As Integer
Dim i As Long
Dim xCurFld As Folder
Dim xTmpFld As Folder
On Error Resume Next
xItemCount = 0
xCount = 0
Set xTmpFld = Nothing
Set xCurFld = Application.ActiveExplorer.CurrentFolder
For Each xAccount In Outlook.Application.Session.Accounts
    Set xDraftFld = xAccount.DeliveryStore.GetDefaultFolder(olFolderDrafts)
    xItemCount = xItemCount + xDraftFld.Items.Count
    If xDraftFld.EntryID = xCurFld.EntryID Then
        Set xTmpFld = xCurFld.Parent
    End If
Next xAccount
Set xDraftFld = Nothing
If xItemCount > 0 Then
   xPromptStr = "Are you sure to send out all the drafts?"
    xYesOrNo = MsgBox(xPromptStr, vbQuestion + vbYesNo, "Kutools for Outlook")
    If xYesOrNo = vbYes Then
        If Not xTmpFld Is Nothing Then
            Set Application.ActiveExplorer.CurrentFolder = xTmpFld
        End If
        VBA.DoEvents
        For Each xAccount In Outlook.Application.Session.Accounts
            Set xDraftFld = xAccount.DeliveryStore.GetDefaultFolder(olFolderDrafts)
            Set xDraftsItems = xDraftFld.Items
            For i = xDraftsItems.Count To 1 Step -1
                If xDraftsItems.Item(i).Recipients.Count <> 0 Then
                    xDraftsItems.Item(i).sEnd
                    xCount = xCount + 1
                End If
            Next
        Next xAccount
        VBA.DoEvents
        Set Application.ActiveExplorer.CurrentFolder = xCurFld
        MsgBox "Successfully sent " & xCount & " messages", vbInformation, "Kutools for Outlook"
    End If
Else
    MsgBox "No Drafts!", vbInformation + vbOKOnly, "Kutools for Outlook"
End If
End Sub

3。 然后保存代码,然后按 F5 键以运行此代码,将弹出一个提示框,提醒您是否发送所有草稿,请单击,请参见屏幕截图:

4。 然后会弹出一个对话框,提醒您已发送了多少电子邮件草稿,请参见屏幕截图:

5。 然后点击 OK 按钮中的所有电子邮件 草稿箱 文件夹将立即发送,请参见屏幕截图:

笔记:

1.上面的代码将发送Outlook中所有帐户的所有电子邮件草稿。

2.如果您只想从“草稿”文件夹发送一些特定的电子邮件,请应用以下VBA代码:

VBA代码:从“草稿”文件夹发送选定的电子邮件:

Sub SendSelectedDraftEmails()
Dim xSelection As Selection
Dim xPromptStr As String
Dim xYesOrNo As Integer
Dim i As Long
Dim xAccount As Account
Dim xCurFld As Folder
Dim xDraftsFld As Folder
Dim xTmpFld As Folder
Dim xArr() As String
Dim xCount As Integer
Dim xMail As MailItem
On Error Resume Next
xCount = 0
Set xTmpFld = Nothing
Set xCurFld = Application.ActiveExplorer.CurrentFolder
For Each xAccount In Outlook.Application.Session.Accounts
    Set xDraftsFld = xAccount.DeliveryStore.GetDefaultFolder(olFolderDrafts)
    If xDraftsFld.EntryID = xCurFld.EntryID Then
        Set xTmpFld = xCurFld.Parent
    End If
Next xAccount
If xTmpFld Is Nothing Then
    MsgBox "The current folder is not a draft folder", vbInformation, "Kutools for Outlook"
    Exit Sub
End If
Set xSelection = Outlook.Application.ActiveExplorer.Selection
If xSelection.Count > 0 Then
    xPromptStr = "Are you sure to send out the selected " & xSelection.Count & " draft item(s)?"
    xYesOrNo = MsgBox(xPromptStr, vbQuestion + vbYesNo, "Kutools for Outlook")
    If xYesOrNo = vbYes Then
        ReDim xArr(xSelection.Count - 1)
        For i = 1 To xSelection.Count
            xArr(i - 1) = xSelection.Item(i).EntryID
        Next
        Set Application.ActiveExplorer.CurrentFolder = xTmpFld
        VBA.DoEvents
        For i = 0 To UBound(xArr)
            Set xMail = Application.Session.GetItemFromID(xArr(i))
            If xMail.Recipients.Count <> 0 Then
                xMail.sEnd
                xCount = xCount + 1
            End If
        Next
        VBA.DoEvents
        Set Application.ActiveExplorer.CurrentFolder = xCurFld
        MsgBox "Successfully sent " & xCount & " messages", vbInformation, "Kutools for Outlook"
    End If
Else
    MsgBox "No items selected!", vbInformation, "Kutools for Outlook"
End If
End Sub

相关文章:

如何在Outlook中分别向多个收件人发送电子邮件?

如何通过Outlook从Excel向列表发送个性化大量电子邮件?

如何在Outlook中分别向多个收件人发送日历?

如何在Outlook中未知的情况下向多个收件人发送电子邮件?


Kutools for Outlook-为Outlook带来100个高级功能,并使工作更加轻松!

  • 自动CC / BCC 根据规则发送电子邮件; 自动转发 自定义多封电子邮件; 自动回复 没有交换服务器,还有更多自动功能...
  • BCC警告 -当您尝试全部答复时显示消息 如果您的邮件地址在“密件抄送”列表中; 缺少附件时提醒,还有更多提醒功能...
  • 在邮件对话中回复(全部)带有所有附件; 回复许多电子邮件 很快; 自动添加问候语 回复时将日期添加到主题中...
  • 附件工具:管理所有邮件中的所有附件, 自动分离, 全部压缩,全部重命名,全部保存...快速报告, 计算选定的邮件...
  • 强大的垃圾邮件 习俗 删除重复的邮件和联系人... 使您能够在Outlook中做得更聪明,更快和更好。
拍摄kutools前景kutools选项卡1180x121
拍摄kutools前景kutools加标签1180x121
 
按评论排序
注释 (15)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
太棒了,很有魅力,谢谢:)
该评论由网站上的主持人最小化
einfach nur perfekt。 赫兹利兴丹克
该评论由网站上的主持人最小化
按上面复制,但是当我按 F5 时没有任何反应
该评论由网站上的主持人最小化
嗨,凯瑟琳,
以上代码在我的 Outlook 中运行良好,您使用的是哪个 Outlook 版本?
该评论由网站上的主持人最小化
我有多个交易所账户。 我想拥有一个不是我默认发件人的帐户。 我会在哪里插入这个代码? 谢谢!
该评论由网站上的主持人最小化
有人会收到一些电子邮件发送到已删除的文件夹吗?
该评论由网站上的主持人最小化
嗨,比尔,
您想从已删除的 foder 中发送多封选定的电子邮件吗?
请把你的问题详细一点,谢谢!
该评论由网站上的主持人最小化
嗨skyyang,我面临同样的问题。 我通常起草 15-20 封电子邮件,然后使用此代码一次性发送所有邮件,但后来意识到其中一封电子邮件没有被发送,而是被发送到我的“已删除”文件夹。 甚至提示也显示了正确的电子邮件数量,例如:“已发送 20 封电子邮件”,但当我检查时,只会发送 19 封,其中一封我会发现它位于我的已删除项目文件夹中。 我希望所有电子邮件都正确无误地发送给他们的收件人。 你能告诉我为什么会这样吗? 请帮忙。
该评论由网站上的主持人最小化
您好,Darewin,以上代码已更新,请重试,谢谢!
该评论由网站上的主持人最小化
同样的问题:如果您选择 4 条消息,在将其中 XNUMX 条发送到垃圾文件夹后(因为“xDraftsItems.Item(i).Delete”语句)
该评论由网站上的主持人最小化
我们使用脚本一次发送所有草稿电子邮件,用于从 sage 200 生成的一批声明电子邮件。发送项目中的电子邮件看起来不错,但客户正在接收它们,正文是中文! 有什么想法可以在这里发生吗?
该评论由网站上的主持人最小化
你能解释一下为什么最后一封邮件(i = 1)是在一个新的 MailItem 中重新创建的,而不仅仅是 .Send 吗?

谢谢。
该评论由网站上的主持人最小化
嗨,快速提问,也许你有一个想法。 我们有一个外部应用程序,可以将所有邮件保存到草稿文件夹。 如果我运行宏,我们会遇到问题,只有列表中的第一封邮件被正确发送,所有其他邮件都被推迟,因为它在邮件地址中添加了引号''。有没有办法避免这种情况?
该评论由网站上的主持人最小化
此代码将所有草稿发送到名为 Merge Tools 的子文件夹中(发送前会询问您)。 我相信你们可以编辑它以满足您的需求。 这要简单得多。 享受 :)
子 SendAllMergeToolsDrafts()

if MsgBox("您确定要发送合并工具草稿文件夹中的所有项目吗?", _
vbQuestion + vbYesNo) <> vbYes 然后退出 Sub

Dim myNamespace As Outlook.NameSpace '将视图更改为收件箱以避免内联错误
Set myNamespace = Application.GetNamespace("MAPI") '将视图更改为收件箱以避免内联错误
设置 Application.ActiveExplorer.CurrentFolder = _
myNamespace.GetDefaultFolder(olFolderInbox) '将视图更改为收件箱以避免内联错误

将 fldDraft 调暗为 MAPIFolder,msg 作为 Outlook.MailItem,intCount 作为整数
Set fldDraft = Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderDrafts).Folders("Merge Tools") '仅发送 Merge Tools 文件夹中的所有草稿
整数 = 0
当 fldDraft.Items.count > 0 时执行
设置 msg = fldDraft.Items(1)
msg.发送
整数计数 = 整数计数 + 1
循环
If Not (msg Is Nothing) 然后设置 msg = Nothing
设置 fldDraft = 无
MsgBox intCount & "发送的消息", vbInformation + vbOKOnly

END SUB
该评论由网站上的主持人最小化
嗨,大家好。 以为我会分享。 这是我发送所有草稿的代码:
Sub SendAllDrafts() '由 jamesmalcolmwood@gmail.com

if MsgBox("您确定要发送草稿文件夹中的所有项目吗?", _
vbQuestion + vbYesNo) <> vbYes 然后退出 Sub

Dim myNamespace As Outlook.NameSpace '将视图更改为收件箱以避免内联错误
Set myNamespace = Application.GetNamespace("MAPI") '将视图更改为收件箱以避免内联错误
设置 Application.ActiveExplorer.CurrentFolder = _
myNamespace.GetDefaultFolder(olFolderInbox) '将视图更改为收件箱以避免内联错误

将 fldDraft 调暗为 MAPIFolder,msg 作为 Outlook.MailItem,intCount 作为整数
Set fldDraft = Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderDrafts) '发送主草稿文件夹中的所有草稿。 对于子文件夹,添加 .Folders("文件夹名称")
整数 = 0
当 fldDraft.Items.count > 0 时执行
设置 msg = fldDraft.Items(1)
msg.发送
整数计数 = 整数计数 + 1
循环
If Not (msg Is Nothing) 然后设置 msg = Nothing
设置 fldDraft = 无
MsgBox intCount & "发送的消息", vbInformation + vbOKOnly

END SUB
这里还没有评论

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护