Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por leonardompires
#46165
Olá, tudo bem? Estou com um problema em uma macro de envio para e-mails, e gostaria de vossa ajuda para solucionar.

Meu Outlook (2010) está configurado para enviar/receber todas as pastas manualmente (ou seja, apertando F9). Eu possuo uma macro que envia e-mails à partir de um remetente secundário, ou seja, não é o meu, e queria que esses e-mails enviados pela macro não ficassem na minha caixa de saída e fossem disparados automaticamente.

Para realizar o envio dessa forma, pensei em realizar um disparo SMTP, visto que já tenho o servidor, login e senha de disparo. Porém, preciso conseguir adaptar meu código para realizar o disparo, algo que estou tendo dificuldades.

Segue um trecho do código atual:
Código: Selecionar todos
Option Explicit

Dim lSalvar As String


Sub ArquivoAnexo()

Dim OutApp As Object
Dim OutMail As Object
Dim strBody As String

Dim linha As String
Dim assunto As String
Dim destino As String
Dim anexo As String
Dim produto As String
Dim unidade As String
Dim retval As String
Dim nome_anexo As String
Dim validacao As String

linha = 3

produto = "x"

Do While produto <> ""        


    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    produto = Sheets("Envio_Emails").Range("M" & linha)
    unidade = Sheets("Envio_Emails").Range("N" & linha)
    destino = Sheets("Envio_Emails").Range("O" & linha)
    assunto = Sheets("Envio_Emails").Range("P" & linha)
    anexo = Sheets("Envio_Emails").Range("Q" & linha)
    nome_anexo = Sheets("Envio_Emails").Range("R" & linha)
    validacao = Sheets("Envio_Emails").Range("L" & linha)

    Sheets("Envio_Emails").Range("S1") = produto

    retval = Dir(anexo)

    If retval = nome_anexo Then

    Else
        GoTo proximo_anexo
    End If

    If anexo = "" Then
        GoTo proximo_anexo
    End If

    Sheets("Envio_Emails").Select
    ActiveSheet.Calculate

    Select Case produto

        Case Is = "Automoveis"
            Sheets("PS1").Select
            Range("K3") = unidade
            ActiveSheet.Calculate

        Case Is = "VC"
            If validacao = "Enviar" Then
                Sheets("PS2").Select
                Range("K3") = unidade
                ActiveSheet.Calculate
            Else: GoTo proximo_anexo

            End If
    End Select

    On Error Resume Next

    Call lCriarImagem

     strBody = Sheets("Envio_Emails").Range("B9") & "<img src=""" & lSalvar & """ style=""""></body>"


    With OutMail

    .Display
    '.From = Sheets("Envio_Emails").Range("H3")
    .SentOnBehalfOfName = "email@email.com.br"
    .To = destino
    .Subject = assunto
    .Attachments.Add anexo
    .HTMLBody = strBody & .HTMLBody
    '.Display
    .Send

    End With

    'MsgBox "Arquivo enviado com sucesso!", vbInformation

    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

proximo_anexo:

    linha = linha + 1

Loop

End Sub
É possível realizar tal adaptação?
Por eduardogrigull
Posts
#46168
Já tentasse usar através do CDO? Aqui funciona direitinho... os Urls deixa como estão
Código: Selecionar todos
Set oEmail = CreateObject("CDO.Message")

oEmail.From = "from.email.address"
oEmail.To = "to.email.address"
oEmail.Subject = "E-Mail Subject"
oEmail.Textbody = "This is the body of the E-Mail message"
oEmail.AddAttachment "C:\Temp\TextFile.TXT"

oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="mailserver.domain.name"
oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/authenticate")=1
oEmail.Configuration.Fields.Update

oEmail.Send
Set oEmail = Nothing
Por leonardompires
#46193
eduardogrigull escreveu:Já tentasse usar através do CDO? Aqui funciona direitinho... os Urls deixa como estão
Código: Selecionar todos
Set oEmail = CreateObject("CDO.Message")

oEmail.From = "from.email.address"
oEmail.To = "to.email.address"
oEmail.Subject = "E-Mail Subject"
oEmail.Textbody = "This is the body of the E-Mail message"
oEmail.AddAttachment "C:\Temp\TextFile.TXT"

oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="mailserver.domain.name"
oEMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/authenticate")=1
oEmail.Configuration.Fields.Update

oEmail.Send
Set oEmail = Nothing
Cara, você é fera!
Funcionou aqui, porém não está indo mais a assinatura do e-mail. Sabe como posso resolver isso?
Segue o código atual:
Código: Selecionar todos
Option Explicit

Dim lSalvar As String


Sub ArquivoAnexo()

Dim OutApp As Object
Dim OutMail As Object
Dim oEmail As Object
Dim strBody As String

Dim linha As String
Dim assunto As String
Dim destino As String
Dim anexo As String
Dim produto As String
Dim unidade As String
Dim retval As String
Dim nome_anexo As String
Dim validacao As String

linha = 3

produto = "x"

Do While produto <> ""
    
    Set oEmail = CreateObject("CDO.Message")

    produto = Sheets("Envio_Emails").Range("M" & linha)
    unidade = Sheets("Envio_Emails").Range("N" & linha)
    destino = Sheets("Envio_Emails").Range("O" & linha)
    assunto = Sheets("Envio_Emails").Range("P" & linha)
    anexo = Sheets("Envio_Emails").Range("Q" & linha)
    nome_anexo = Sheets("Envio_Emails").Range("R" & linha)
    validacao = Sheets("Envio_Emails").Range("L" & linha)
    
    Sheets("Envio_Emails").Range("S1") = produto
      
    retval = Dir(anexo)

    If retval = nome_anexo Then
        
    Else
        GoTo proximo_anexo
    End If
    
    If anexo = "" Then
        GoTo proximo_anexo
    End If
    
    Sheets("Envio_Emails").Select
    ActiveSheet.Calculate
    
    Select Case produto
    
        Case Is = "X"
            Sheets("RESULTADO_X").Select
            Range("K3") = unidade
            ActiveSheet.Calculate
            
        Case Is = "Y"
            If validacao = "Enviar" Then
                Sheets("RESULTADO_Y").Select
                Range("K3") = unidade
                ActiveSheet.Calculate
            Else: GoTo proximo_anexo
            
            End If
    End Select
    
    On Error Resume Next

    Call lCriarImagem
    
    'strBody = "<body> </h2>Olá!<br/> <br/></h2>Segue a prévia do IRC de Junho.<h2> </h2> </h2><br/> <img src=""" & lSalvar & """ style=""""></body>"
     strBody = Sheets("Envio_Emails").Range("B9") & "<img src=""" & lSalvar & """ style=""""></body>"
     
    'UTILIZAR O SITE https://wordtohtml.net/ PARA GERAR O HTML
        
    With oEmail
    
    oEmail.From = "emaio@envio"
    oEmail.To = "email@recebimento"
    oEmail.Subject = assunto
    oEmail.AddAttachment anexo
    oEmail.HTMLBody = strBody & .HTMLBody

    
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "servidor.de.envio"
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/authenticate") = 1
    oEmail.Configuration.Fields.Update
    
    oEmail.Send
    
    End With
    
    'MsgBox "Arquivo enviado com sucesso!", vbInformation
    
    On Error GoTo 0
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    
proximo_anexo:
    
    linha = linha + 1
    
Loop

End Sub
Por eduardogrigull
Posts
#46194
Por esse método ele não consegue recuperar a assinatura, infelizmente. Mas , você pode tentar adicioná-la no Body puxando o arquivo .txt da sua assinatura atual, ele deve estar em:
C:\Users\<<User>>\AppData\Roaming\Microsoft\Signatures\"nome da sua assinatura.txt"

Eu infelizmente não tenho como testar agora, mas acredito que fazendo uma leitura do arquivo de texto pra planilha, você consiga adicionar. Ou ainda tentando direto msm... Me avisa se deu certo
Por leonardompires
#46196
eduardogrigull escreveu:Por esse método ele não consegue recuperar a assinatura, infelizmente. Mas , você pode tentar adicioná-la no Body puxando o arquivo .txt da sua assinatura atual, ele deve estar em:
C:\Users\<<User>>\AppData\Roaming\Microsoft\Signatures\"nome da sua assinatura.txt"

Eu infelizmente não tenho como testar agora, mas acredito que fazendo uma leitura do arquivo de texto pra planilha, você consiga adicionar. Ou ainda tentando direto msm... Me avisa se deu certo
Infelizmente não da certo via TXT, pois a assinatura possui link e imagem. Quando jogo txt, ela fica em uma linha única e toda despadronizada.
Eu trazia via .HTMLBody, mas usando CDO não aceita. Vou continuar buscando uma solução aqui.
Por leonardompires
#46242
eduardogrigull escreveu:Tente recriar sua assinatura em HTML5, e adicionar ao .HtmlBody.
Esse site faz o trabalho por voce:

https://html-online.com/editor/
Muito obrigado!

Agora as imagens não aparecem para os destinatários, ocorre o erro de segurança e fica um "X" vermelho.

Cada hora um erro novo. Será que é alguma configuração no momento do envio?
Por eduardogrigull
Posts
#46267
Talvez seja um problema no texto HTML, aqui segue um exemplo funcional, com imagens:
Código: Selecionar todos
xHTMLBody = "<span LANG=EN>" _
                & "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
                & "Hello, this is the data range that you want:<br> " _
                & "<br>" _
                & "<img src='cid:DashboardFile.jpg'>" _
                & "<br>Best Regards!</font></span>"
Nao se esqueça que caso adicione uma imagem do seu computar, o caminho deve ser assim:
file:///C:/imagemteste.png
Por leonardompires
#46277
eduardogrigull escreveu:Talvez seja um problema no texto HTML, aqui segue um exemplo funcional, com imagens:
Código: Selecionar todos
xHTMLBody = "<span LANG=EN>" _
                & "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
                & "Hello, this is the data range that you want:<br> " _
                & "<br>" _
                & "<img src='cid:DashboardFile.jpg'>" _
                & "<br>Best Regards!</font></span>"
Nao se esqueça que caso adicione uma imagem do seu computar, o caminho deve ser assim:
file:///C:/imagemteste.png
Eduardo, a forma de salvamento está identica. Porém, quando tento alterar para "cid", não aparece a imagem nem para mim.

Segue o código como está agora:
Código: Selecionar todos
Option Explicit

Dim lSalvar As String


Sub ArquivoAnexo()

Dim OutApp As Object
Dim OutMail As Object
Dim oEmail As Object
Dim strBody As String

Dim linha As String
Dim assunto As String
Dim destino As String
Dim anexo As String
Dim produto As String
Dim unidade As String
Dim retval As String
Dim nome_anexo As String
Dim validacao As String
Dim assinatura As String

linha = 3

produto = "x"

Do While produto <> ""
    
    Set oEmail = CreateObject("CDO.Message")

    produto = Sheets("Envio_Emails").Range("M" & linha)
    unidade = Sheets("Envio_Emails").Range("N" & linha)
    destino = Sheets("Envio_Emails").Range("O" & linha)
    assunto = Sheets("Envio_Emails").Range("P" & linha)
    anexo = Sheets("Envio_Emails").Range("Q" & linha)
    nome_anexo = Sheets("Envio_Emails").Range("R" & linha)
    validacao = Sheets("Envio_Emails").Range("L" & linha)
       
    Sheets("Envio_Emails").Range("S1") = produto
      
    retval = Dir(anexo)

    If retval = nome_anexo Then
        
    Else
        GoTo proximo_anexo
    End If
    
    If anexo = "" Then
        GoTo proximo_anexo
    End If
    
    Sheets("Envio_Emails").Select
    ActiveSheet.Calculate
    
    Select Case produto
    
        Case Is = "X"
            Sheets("RESULTADO_X").Select
            Range("K3") = unidade
            ActiveSheet.Calculate
            
        Case Is = "Y"
            If validacao = "Enviar" Then
                Sheets("RESULTADO_Y").Select
                Range("K3") = unidade
                ActiveSheet.Calculate
            Else: GoTo proximo_anexo
            
            End If
    End Select
    
    On Error Resume Next

    Call lCriarImagem 'cria a imagem e informa o caminho
    
    'strBody = "<body> </h2>Olá!<br/> <br/></h2>Segue a prévia do IRC de Junho.<h2> </h2> </h2><br/> <img src=""" & lSalvar & """ style=""""></body>"
     strBody = Sheets("Envio_Emails").Range("B9") & "<img src=""" & lSalvar & """ style=""""></body>"
     
    'UTILIZAR O SITE https://wordtohtml.net/ PARA GERAR O HTML
        
    With oEmail
    
    .Display
    oEmail.From = "EMAIL_ENVIO@EMAIL"
    oEmail.To = "EMAIL_RECEBIMENTO@EMAIL "
    oEmail.Subject = assunto
    oEmail.AddAttachment anexo
    oEmail.HTMLBody = strBody & .HTMLBody

    
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "MEUSERVER.SERVER"
    oEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/authenticate") = 1
    oEmail.Configuration.Fields.Update
    
    oEmail.Send
    
    End With
    
    'MsgBox "Arquivo enviado com sucesso!", vbInformation
    
    On Error GoTo 0
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    
proximo_anexo:
    
    linha = linha + 1
    
Loop

End Sub
Por eduardogrigull
Posts
#46279
Eu pesquisei bastante e fiz alguns testes, mas infelizmente as imagens não funcionam através de HTML num Email CDO... Os links funcionam bem. O jeito seria encontrar a solução fazendo através do Outlook
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord