Notifications
Clear all

Deletar Emails do Rascunho

7 Posts
2 Usuários
0 Reactions
1,727 Visualizações
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Olá amigos de fórum, Estou tentando automatizar o envio de emails do Outlook.

Tenho uma planilha que ao invés de enviar os emails diretamente (.Send para evitar AVISO de segurança), eu uso .Save (salva as mensagens no rascunho)

Dai fiz um módulo no Outlook com o seguinte código:

Public Sub EnviaEmailDoRascunho()
On Error GoTo CancelaEnvio
    Dim lDraftItem As Long
    Dim myOutlook As Outlook.Application
    Dim myNameSpace As Outlook.NameSpace
    Dim myFolders As Outlook.Folders
    Dim myDraftsFolder As Outlook.MAPIFolder
    Dim objMailMessage As Outlook.MailItem
    Dim emlBody, sendTo As String
    Dim TOs
     
    Set myOutlook = Outlook.Application
    Set myNameSpace = myOutlook.GetNamespace("MAPI")
    Set myFolders = myNameSpace.Folders
    Set myDraftsFolder = myNameSpace.PickFolder
     
    For lDraftItem = myDraftsFolder.Items.Count To 1 Step -1
        TOs = Split(myDraftsFolder.Items.Item(lDraftItem).To, ";")
        For I = 0 To UBound(TOs)
            Set objMailMessage = myOutlook.CreateItem(0)
            With objMailMessage
                .To = TOs(I)
                .Body = myDraftsFolder.Items.Item(lDraftItem).Body
                .Subject = myDraftsFolder.Items.Item(lDraftItem).Subject
                .Send
            End With
        Next
    Next lDraftItem
    
    Set myDraftsFolder = Nothing
    Set myNameSpace = Nothing
    Set myOutlook = Nothing
    
    MsgBox "Mensagens enviadas com sucesso.", vbInformation, "CONFIRMAÇÃO"
    
Exit Sub

CancelaEnvio:
    MsgBox "Ação cancelada pelo usuário.", vbExclamation, "CANCELADO"
End Sub

Essa rotina apenas envia os emails, não exlcuindo os rascunhos após o envio.

Procurando na internet, encontrei uma rotina que deleta emails, porém, somente se forem selecionados com o mouse.

Sub DeleteSelectedEmails()
    Dim myOlApp, myNameSpace, Sel, objRecip As Object
    Dim MyItem As Outlook.MailItem
    Dim DeletedFolder As Object
    Dim objProperty As Object
    Dim SavedEntryId, I
 
    Set myOlApp = CreateObject("Outlook.Application")
    Set myNameSpace = myOlApp.GetNamespace("MAPI")
    Set Sel = Application.ActiveExplorer.Selection
 
       For I = 1 To Sel.Count
           If Sel.Item(I).Class = olMail Then
               Set MyItem = Sel.Item(I)
               MyItem.UserProperties.Add "DeleteMeNow", olText
               MyItem.Save
               MyItem.Delete   ' Places message in the Deleted Items folder
           End If
       Next
    
       Set DeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
       For Each MyItem In DeletedFolder.Items
           Set objProperty = MyItem.UserProperties.Find("DeleteMeNow")
           If TypeName(objProperty) <> "Nothing" Then
               MyItem.Delete
           End If
       Next
End Sub

É possível adaptar esse segundo código para que ele delete sempre os emails dos rascunhos?

Resumindo, preciso de alguma rotina para excluir todos os meus rascunhos no Outlook.

 
Postado : 09/09/2014 12:41 pm
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Continuo tentando uma solução, mas sem êxito.

 
Postado : 11/09/2014 8:28 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente deletar um email em especifico.
Eu não tenho como testar!!

Caso o email especifico for realmente deletado, retorne.

Sub EuNuncaUseiVBAeEmail()
On Error Resume Next

c00 = "Nome_Assunto_Aqui"

With CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(16).Items
.Find("[Subject]='" & c00 & "'").Delete
Do Until Err.Number <> 0
.FindNext.Delete
Loop
End With
End Sub

Att

 
Postado : 11/09/2014 8:56 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Alexandre, boa tarde.

Seu exemplo proposto atendeu meu problema, pois, os emails que eu envio em massa possuem sempre o mesmo assunto. Ou seja, solucionou o problema de deletar os rascunhos.

Agora, percebi que na minha rotina de enviar os emails, ele não está capturando anexos que os meus rascunhos possuem.

Public Sub EnviaEmailDoRascunho()
On Error GoTo CancelaEnvio
    Dim lDraftItem As Long
    Dim myOutlook As Outlook.Application
    Dim myNameSpace As Outlook.NameSpace
    Dim myFolders As Outlook.Folders
    Dim myDraftsFolder As Outlook.MAPIFolder
    Dim objMailMessage As Outlook.MailItem
    Dim emlBody, sendTo As String
    Dim TOs
     
    Set myOutlook = Outlook.Application
    Set myNameSpace = myOutlook.GetNamespace("MAPI")
    Set myFolders = myNameSpace.Folders
    Set myDraftsFolder = myNameSpace.PickFolder
     
    For lDraftItem = myDraftsFolder.Items.Count To 1 Step -1
        TOs = Split(myDraftsFolder.Items.Item(lDraftItem).To, ";")
        For I = 0 To UBound(TOs)
            Set objMailMessage = myOutlook.CreateItem(0)
            With objMailMessage
                .To = TOs(I)
                .Body = myDraftsFolder.Items.Item(lDraftItem).Body
                .Subject = myDraftsFolder.Items.Item(lDraftItem).Subject
                .Send
            End With
        Next
    Next lDraftItem
    
    Set myDraftsFolder = Nothing
    Set myNameSpace = Nothing
    Set myOutlook = Nothing
    
    MsgBox "Mensagens enviadas com sucesso.", vbInformation, "CONFIRMAÇÃO"
    
Exit Sub

CancelaEnvio:
    MsgBox "Ação cancelada pelo usuário.", vbExclamation, "CANCELADO"
End Sub

Eu até já tentei acrescentar a rotina: .Attachments = myDraftsFolder.Items.Item(lDraftItem).Attachments dentro do With, mas não funcionou.
Eu acredito que o que falta é apenas uma instrução parecida com a de cima, porém, no meu caso a sintaxe que deve estar errada.

Alguém pode ajuar nisso?

 
Postado : 11/09/2014 9:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Seu exemplo proposto atendeu meu problema

se foi útil, por favor, click na mãozinha!!!!!!!!!!!!

Att

 
Postado : 11/09/2014 9:45 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Bom, consegui resolver o problema substituindo essa parte do código:

For lDraftItem = myDraftsFolder.Items.Count To 1 Step -1
        TOs = Split(myDraftsFolder.Items.Item(lDraftItem).To, ";")
        For I = 0 To UBound(TOs)
            Set objMailMessage = myOutlook.CreateItem(0)
            With objMailMessage
                .To = TOs(I)
                .Body = myDraftsFolder.Items.Item(lDraftItem).Body
                .Subject = myDraftsFolder.Items.Item(lDraftItem).Subject
                .Send
            End With
        Next
    Next lDraftItem

Por esta:

    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
 
Postado : 11/09/2014 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Eu fico feliz, que tenha resolvido seu problema!

Obrigado pelo retorno!!

Att

 
Postado : 11/09/2014 11:51 am