Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Enviar E-mail direto do Excel sem usar o Outlook

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Mathmatic »

Saudações Pessoal,

Estou na "busca" de uma macro(código VBA) para enviar E-mail direto do Excel sem usar o Outlook.

Estou analisando alguns tópicos aqui no fórum, mas até o momento só encontrei exemplos que usam o Outlook.

Obs: encontrei na internet dois Links de sites que no meu ponto de vista são muito bons exemplos.... MAS, não estou conseguindo usar os códigos ali exemplificados... não sei se os códigos ali postados faltam algum complemento... ou éh eu que não tenho conhecimento suficiente para fazê-los funcionar.

Vou expor para os senhores os 2 Links que encontrei na internet, e que no meu ponto de vista são boas fontes de informações.... Talvez os senhores consigam colocá-los em funcionalidade e expor aqui no tópico quem sabe uma "planilha exemplo" com o uso de um desses dois exemplos dos Links, ou se tiverem uma sugestão melhor, também será muito bem vinda.

* segue abaixo os dois Links que encontrei na internet:

1) http://guiadoexcel.com.br/enviar-email- ... -o-outlook
2) http://cristina-mundialnoticias4.blogsp ... ha-do.html


No demais ..... sou grato desde já.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Fabio Trindade
Manda bem
Manda bem
Mensagens: 161
Registrado em: Dom Abr 24, 2011 4:07 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Fabio Trindade »

Boa noite, Mathmatic.

Visto sua duvida sobre enviar e-mail através do VBA sem utilização do Outlook, pois o 1º link informado esta funcionando normal, pois suas configurações estão sendo direcionadas para utilizar o serviço do Gmail, Código testado:

* Vale lembrar que é necessário fazer a referencia a Biblioteca Microsoft CDO for Windows 2000 Library

Código: Selecionar todos

'Necessario realizar a chamada da biblioteca Microsoft CDO for Windows 2000 Library
'Testado no Office 2010, funcionou perfeito
'Baseado no código disponibilizado em: http://www.a1vbcode.com/snippet-3691.asp
Function EnviaEmail()
    Dim iMsg, iConf, Flds
 
    'Seta as variáveis, lembrando que o objeto Microsoft CDO deverá estar habilitado em Ferramentas->Referências->Microsoft CDO for Windows 2000 Library
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
 
    'Configura o componente de envio de email
    schema = "http://schemas.microsoft.com/cdo/configuration/"
    Flds.Item(schema & "sendusing") = 2
    'Configura o smtp
    Flds.Item(schema & "smtpserver") = "smtp.gmail.com"
    'Configura a porta de envio de email
    Flds.Item(schema & "smtpserverport") = 465
    Flds.Item(schema & "smtpauthenticate") = 1
    'Configura o email do remetente
    Flds.Item(schema & "sendusername") = "teste@gmail.com"
    'Configura a senha do email remetente
    Flds.Item(schema & "sendpassword") = "sua_senha"
    Flds.Item(schema & "smtpusessl") = 1
    Flds.Update
 
    With iMsg
        'Email do destinatário
        .To = "Email_de_Destino@gmail.com;"
        'Seu email
        .From = "Email_de_Origem@gmail.com"
        'Título do email
        .Subject = "Isto é um teste de Envio de email"
        'Mensagem do e-mail, você pode enviar formatado em HTML
        .HTMLBody = "Mensagem enviada com o gmail."
        'Seu nome ou apelido
        .Sender = "Teste"
        'Nome da sua organização
        .Organization = "Sua_Empresa"
        'email de responder para
        .ReplyTo = "Email_de_Origem@gmail.com"
        'Anexo a ser enviado na mensagem
        .AddAttachment ("C:\Users\fabio.trindade\Desktop\teste_envio_de_email_sem_outlook.txt")
        'Passa a configuração para o objeto CDO
        Set .Configuration = iConf
        'Envia o email
        SendEmailGmail = .Send
    End With
 
    'Limpa as variáveis
    Set iMsg = Nothing
    Set iConf = Nothing
    Set Flds = Nothing
End Function

' Para atribuar em um botao em sua planilha
Sub Enviar_Email()
    Call EnviaEmail
End Sub


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Mathmatic »

Saudações sr. Fábio,

Estou tentando adaptar este código para enviar e-mail através do e-mail do site da empresa para qual eu trabalho (cujo site não éh o Gmail).
MAS.., estou tendo dificuldades.... não consegui adaptar !

Obs: fiz a configuração para a biblioteca Microsoft CDO for Windows 2000 Library, conforme eh necessário, mas... mesmo assim não deu certo ainda !

Então venho lhe pedir:
Poderia fazer adaptações no código, para..., por exemplo, enviar e-mail automatomático através do BOL (cujo site éh: http://www.bol.uol.com.br/)

* vou criar um e-mail no BOL só para poder testar depois o código.

Obs: o e-mail oficial a ser usado nas atividades será o da empresa para qual eu trabalho (cujo site não éh o Gmail e nem o BOL), .....MAS.. se eu ver como o senhor fez adaptações nesse código para enviar e-mail direto pelo BOL, então talvez eu conseguirei também adaptar o código para o e-mail da empresa.

sou grato desde já.


Avatar do usuário
Fabio Trindade
Manda bem
Manda bem
Mensagens: 161
Registrado em: Dom Abr 24, 2011 4:07 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Fabio Trindade »

Bom dia, Mathmatic.

Andei olhando na internet e consegui encontrar alguns códigos:

http://maximoaccess.maisforum.com/t3548 ... 0x80040217
http://www.scriptbrasil.com.br/forum/to ... l-por-vba/

Consegui adaptar o código que ficou assim:

Código: Selecionar todos

Private Sub EnviaEmailBol()

On Error GoTo erromail
Dim Mens As CDO.Message
Dim Config As CDO.Configuration

Set Config = New CDO.Configuration

    With Config

        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtps.bol.com.br" 'aqui uso o provedor da empresa que trabalho
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 ' porta usada pelo bol
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        '.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email" 'aqui usei meu email
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha" 'coloque a senha do seu email
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

        .Fields.Update
    End With

    Set Mens = New CDO.Message
    
        With Mens
            Set .Configuration = Config
            .From = "email@bol.com.br" 'quem envia
        'If Not IsNull(Me.txtDeMail) Then
            .Sender = "email@bol.com.br" 'email de quem envia.
        'End If
        
        'If Not IsNull(Me.txtCOculta) Then
            .BCC = ""
        'End If
    
            .Subject = "Teste Email Bol" 'caixa texto assunto
            .TextBody = "Mensagem teste Bol" 'Caixa texto com o texto
            .To = "destino@bol.com.br" 'caixa texto para quem vai o email"
        
        'If Not IsNull(Me.txtAnexo) Then
            .AddAttachment ("C:\Users\fabio.trindade\Desktop\teste_envio_de_email_sem_outlook.txt")
        'End If
        
            .Send ' envia
    
    End With
    
MsgBox "Menssagem enviada com sucesso"

        Set Mens = Nothing
        Set Config = Nothing
    
Exit Sub

erromail:
MsgBox Err.Number & " " & Err.Description

        Set Mens = Nothing
        Set Config = Nothing

    Exit Sub

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Mathmatic »

Saudações sr. Fábio Trindade,

O código funcionou e já estou conseguindo enviar automaticamente por VBA arquivos (em anexo) através do Bol.

Aproveito para lhe perguntar 2 (duas) coisas:

1) na linha do código sugerido onde diz: ("http://schemas.microsoft.com/cdo/config ... serverport") = 587 ' Porta usada pelo Bol...... pergunto: referente ao numero 587 ? ...... como faço para descobrir o numero da porta usada pelo provedor da empresa para qual trabalho ?....tenho que perguntar para o pessoal de suporte do sistema... OU... dentro do próprio sistema eu consigo descobrir esse numero que corresponde a porta usada pelo provedor da empresa ?

2) Ao invés de eu "anexar" o arquivo.xls ao e-mail, Teria como colar no corpo do E-mail somente a planilha (ABA) desejada ?... OU.... talvez selecionar apenas uma parte desejada da ABA (tipo da célula A1 até a célula F20) e colar essa seleção (com as configurações originais) no corpo do e-mail ?

Dessa forma eu enviaria somente informações específicas da planilha(ABA) ativa.

Obs: estou analisando um código (sugerido pelo senhor para o tópico Macro para Enviar Email) dentro do fórum, cujo Link éh...: viewtopic.php?t=2059&p=9557

vou ver se consigo adaptar ao último codigo sugerido para este meu tópico (cujo qual já está funcionando para enviar com anexos) ..... MAS .... se quiser dar uma "ajudinha" na adaptação, serei agradecido.


No demais, muito obrigado.


Avatar do usuário
Fabio Trindade
Manda bem
Manda bem
Mensagens: 161
Registrado em: Dom Abr 24, 2011 4:07 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Fabio Trindade »

Boa noite, Mathmatic.

1) Referente a sua primeira duvida as configurações de porta no bol eu encontrei no site deles mesmo http://email.bol.uol.com.br/ajuda/confi ... .jhtm#rmcl e aqui nesse site tem boas dicas sobre quais as portas para cada servidor de e-mail http://www.truquesemacetes.com/html/sm/ ... tp_p01.htm. Ainda na primeira duvida o área responsável por prestar suporte técnico em sua empresa tem as configurações exatas de quais porta de smtp que estão utilizando.

2) Já sua segunda duvida é hum pouco complicada, eu consegui essa façanha de copiar um intervalo e colocar no corpo do e-mail mantendo a formação no outlook porém o código pega todo o conteúdo da aba ativa e não um intervalo determinado ex.: se na aba ativa tiver informação até a coluna " X " vai colar a informação no corpo independente se tiver coluna vazia dentro do exemplo. Código retira dessa pagina http://www.rondebruin.nl/win/s1/outlook/mail.htm que por sinal é muito bacana as informações disposta nela.

Obs.: Vou procurar o código que consegui fazer o tal feito e postar aqui no fórum para os colegas


*** Senhores se minhas citações de links de outros lugares estiverem errado, me avise para que eu possa postar de forma correta! ***


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Mathmatic »

Saudações sr. Fábio,

voltando ao assunto referente envio de e-mail automático usando a porta do Bol, está funcionando muito bem através do meu PC.

MAS .... quando tento fazer isso, usando o servidor da empresa, ocorre ERROR, pois para acessar a internet da empresa, usa-se um servidor PROXY.

Então, ao tentar executar o código ocorre falha .... Tem como fazer o código enviar e-mail automático usando o servidor PROXY ?


obrigado pela atenção .....


souexcel
Acabou de chegar
Acabou de chegar
Mensagens: 7
Registrado em: Qui Jul 01, 2010 9:34 am

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por souexcel »

Procurando ajuda para essa mesma situação vim parar aqui.
Eu tenho uma planilha de cotação de preços.
Na primeira aba fica uma listagem e na frente tem tres colunas, de tres fornecedores, depois, uso uma fórmula para definir qual foi o vencedor da licitação.
Tenho ainda mais três abas, essas abas são cada uma de um fornecedor, gostaria de poder enviar sem o Outlook, para o email de cada fornecedor apenas a aba dele.
Nas Plan2, Plan3 e Plan4 ficam o resultado e na célula B2 o campo onde devo colocar o email do fornecedor.
A minha idéia é colocar um botão em cada aba que envia do meu email (email do usuário da planilha) para o email cadastrado na célula B2 aquela aba apenas.
Alguém para me ajudar com isso?


tecalex
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Ter Dez 27, 2016 8:31 pm

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por tecalex »

Olá Fábio segui todos os procedimentos que explicou, consigo enviar o email normalmente, mas quando chega na hora do anexo, dá erro.
Mensagem:Erro de Compilação. Referência Inválida ou não qualificada. O que eu faço. Sou iniciante no VBA.
Módulo1.rar
(1021 Bytes) Baixado 343 vezes


Avatar do usuário
Alex Abreu
Colaborador
Colaborador
Mensagens: 31
Registrado em: Sáb Jun 30, 2018 4:40 pm
Localização: Rio do Campo/SC
Contato:

Re: Enviar E-mail direto do Excel sem usar o Outlook

Mensagem por Alex Abreu »

Fabio Trindade escreveu: Sex Mai 30, 2014 1:06 pm Bom dia, Mathmatic.

Andei olhando na internet e consegui encontrar alguns códigos:

http://maximoaccess.maisforum.com/t3548 ... 0x80040217
http://www.scriptbrasil.com.br/forum/to ... l-por-vba/

Consegui adaptar o código que ficou assim:

Código: Selecionar todos

Private Sub EnviaEmailBol()

On Error GoTo erromail
Dim Mens As CDO.Message
Dim Config As CDO.Configuration

Set Config = New CDO.Configuration

    With Config

        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtps.bol.com.br" 'aqui uso o provedor da empresa que trabalho
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 ' porta usada pelo bol
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        '.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email" 'aqui usei meu email
        .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha" 'coloque a senha do seu email
        .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

        .Fields.Update
    End With

    Set Mens = New CDO.Message
    
        With Mens
            Set .Configuration = Config
            .From = "email@bol.com.br" 'quem envia
        'If Not IsNull(Me.txtDeMail) Then
            .Sender = "email@bol.com.br" 'email de quem envia.
        'End If
        
        'If Not IsNull(Me.txtCOculta) Then
            .BCC = ""
        'End If
    
            .Subject = "Teste Email Bol" 'caixa texto assunto
            .TextBody = "Mensagem teste Bol" 'Caixa texto com o texto
            .To = "destino@bol.com.br" 'caixa texto para quem vai o email"
        
        'If Not IsNull(Me.txtAnexo) Then
            .AddAttachment ("C:\Users\fabio.trindade\Desktop\teste_envio_de_email_sem_outlook.txt")
        'End If
        
            .Send ' envia
    
    End With
    
MsgBox "Menssagem enviada com sucesso"

        Set Mens = Nothing
        Set Config = Nothing
    
Exit Sub

erromail:
MsgBox Err.Number & " " & Err.Description

        Set Mens = Nothing
        Set Config = Nothing

    Exit Sub

End Sub
Bom dia a todos, desculpem desenterrar esse tópico, mas estou com um problema
Estou usando esse módulo que menciono acima, confgurei todas as informações de email, senha, etc
Como ele tem um comando que informa o código do erro e a descrição do mesmo o que eu achei muito útil por sinal
aparece o erro -2147220973 Falha na conexão do transporte com o servidor
como posso resolver isso?

Grato!

EDIT: Boa Tarde já achei onde se encontrava o erro, minha senha que estava salva numa variável estava em branco :?

PS: Achei ótimo esse sistema de tratamento de erro, ele explica certinho todos diferentes tipos de erros 1004 que encontrei, muito útil que até salvei num módulo complementar para usar em todos os meus sistemas

Código: Selecionar todos

'Colocar essa Parte no início de qualquer macro
Dim Erro
On Error goto Erro
'Colocar essa Parte no Fim de qualquer Macro!
If Erro = 0 Then Exit Sub
Erro:
MsgBox Err.Number & " " & Err.Description


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder