【问题标题】:Send email from draft folder从草稿文件夹发送电子邮件
【发布时间】:2020-06-29 15:17:46
【问题描述】:

使用下面的 VBA 编码,我可以发送 Outlook 草稿文件夹中的所有电子邮件,但唯一的问题是我必须提供父文件夹名称。我们可以通过编码获得这个细节,因为这个宏将被其他不熟悉 VBA 的用户使用。

Dim lDraftItem As Long
Dim myOutlook As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim myFolders As Outlook.Folders
Dim myDraftsFolder As Outlook.MAPIFolder

Set myOutlook = Outlook.Application
Set myNameSpace = myOutlook.GetNamespace("MAPI")
Set myFolders = myNameSpace.Folders
Set myDraftsFolder = myFolders("Gaus_Shaikh2@syntelinc.com").Folders("Drafts")

For lDraftItem = myDraftsFolder.Items.Count To 1 Step -1

    If Len(Trim(myDraftsFolder.Items.Item(lDraftItem).To)) > 0 Then
        myDraftsFolder.Items.Item(lDraftItem).Send

    End If

Next lDraftItem

【问题讨论】:

  • 你的意思是父文件夹名称?我的文件夹?

标签: excel vba outlook


【解决方案1】:

这应该可以工作...

Set myDraftsFolder = myNamespace.GetDefaultFolder(olFolderDrafts)

* 编辑 *

下面的代码可能是一个更好用的函数;它具有错误检查功能,因此“收件人”部分中包含无效字段的任何电子邮件都不应中止该功能

Sub TestSendDrafts()
    Call SendDraftMail
End Sub

Function SendDraftMail() As Boolean
On Error GoTo ExitFunction
    Dim ThisNameSpace As Outlook.NameSpace: Set ThisNameSpace = Application.GetNamespace("MAPI")
    Dim DraftFolder As Outlook.MAPIFolder: Set DraftFolder = ThisNameSpace.GetDefaultFolder(olFolderDrafts)

    Dim Var As Variant, i As Long, Difference As Long, SentItems As Long
    For i = DraftFolder.Items.Count To 1 Step -1
        Set Var = DraftFolder.Items.Item(i)
        DoEvents
        If Var.Class = olMail Then
            If Len(Trim(Var.To)) > 0 Then
                On Error Resume Next
                Var.Send
                If Err.Number = 0 Then SentItems = SentItems + 1
                On Error GoTo ExitFunction
            End If
        End If
    Next i

    Debug.Print "Sent " & SentItems & " message(s) from 'Draft E-mail'."
    SendDraftMail = True

ExitFunction:
End Function

【讨论】:

  • 我用过,但现在代码 myDraftsFolder.Items.Item(lDraftItem).send 出现错误
【解决方案2】:

替换这一行:

Set myDraftsFolder = myFolders("Gaus_Shaikh2@syntelinc.com").Folders("Drafts")

用这三行:

Dim sUser As String
sUser = myFolders.Item(2).Name

Set myDraftsFolder = myFolders(sUser).Folders("Drafts")

第二个文件夹名称将是用户帐户名称(电子邮件地址),您可以将其存储为字符串并传递到 myFolders() 以限定其特定帐户。

【讨论】:

  • 它为我提供了 sUser 值作为“公共文件夹 - Gaus_Shaikh2@syntelinc.com”。我使用替换功能删除了“公共文件夹-”,但现在它抛出错误,因为“此方法不能与内联响应邮件项一起使用”
  • 确保sUser 值是您实际文件夹的确切名称。此外,您可以遍历项目1, 2, 3 以测试哪一个仅返回电子邮件。
  • myDraftsFolder.Items.Item(lDraftItem).send 出现错误
  • @Gaus - 这是一个单独的问题。如果此处的某个答案对您有所帮助,请将其标记为已回答,并将另一个问题(超出本问题的范围)发布为新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多