Como enviar emails, via SMTP, usando o CdoSys
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
De Valdino Campos
Neste artigo irei demonstrar como enviar emails, via SMTP, usando o componente CdoSys. Este componente costuma ser instalado automaticamente com as novas versões do Windows ou quando instalamos alguns programas como, por exemplo, o Outlook.
O que é o CdoSys?
Resumidamente falando, é um componente criado pela Microsoft que tem por finalidade fornecer argumentos para o envio de emails via SMTP. Este componente fornece todos os argumentos presentes em programas de emails e webmails, tais como: título da mensagem, destinatário, com cópia (cc), com cópia oculta (cco), corpo da mensagem e envio de anexos.
Uma vantagem que temos ao usar este componente, é que podemos fornecer a opção de envio de mensagens com anexos diretamente do aplicativo, seja ele Access, Visual Basic, seja implementando em uma página web integrada à linguagem Asp ou Php, por exemplo.
Como faço para utilizar esse recurso?
Em primeiro lugar, é necessário conferir se o sistema possui a DLL CdoSys instalada na pasta System32. Caso tenha, é provável que ela esteja presente nas referências do módulo VBA do seu aplicativo. Para conferir se ela faz parte da lista, abra qualquer formulário em modo estrutura ou design e abra o módulo VBA do mesmo, ou pressione as teclas ALT+F11. Já no módulo, clique no menu Ferramentas e depois em Referências. Consulte na lista de referências se existe a “Microsoft CDO for Windows 2000 Library”. Em caso positivo, marque-a.
Caso ela não esteja presente nas referências, clique no botão Procurar, localize-a e confirme. Se tudo der certo, ela já estará presente e referenciada. Caso não dê certo, pode ser que seja necessário registrá-la. Para isso, abra o prompt do DOS ou cmd, digite regsvr32 cdosys.dll e dê Enter. Se tudo funcionar direitinho, será exibida a mensagem de Sucesso.
OK, ela já está registrada e referenciada no VBA, e agora?
Agora chegou a hora de declarar variáveis que representarão as rotinas presentes na DLL e que são responsáveis pelo desempenho das funções que lhe são competentes.
Em primeiro lugar, precisamos declarar as variáveis que representarão o objeto CdoSys e instanciá-las:
Faça o login aqui para ter acesso ao código.
Agora que já criamos e instanciamos os objetos a serem utilizados para o envio da mensagem, chegou a hora de fazermos as configurações necessárias, tais como porta a ser usada, provedor, senha do email usado para o envio, anexos, etc.
Faça o login aqui para ter acesso ao código.
Agora que está tudo pronto para o envio da mensagem, vamos configurar os atributos da mensagem em si, tais como “Email de quem envia”, “Cópia oculta”, etc.
Faça o login aqui para ter acesso ao código.
Observações a respeito da formatação de texto
Conforme mencionado acima, é possível enviar mensagens como texto, como HTML ou como uma página qualquer da Internet. No entanto, devemos estar atentos à algumas observações quanto à formatação do texto, que difere entre um tipo e outro. Para enviarmos mensagem em HTML, podemos utilizar as tags usadas na programação de páginas HTML para mudar a cor do texto, o tipo de letras, colocar bordas em tabelas, quebra de linha, parágrafos, etc. Para uma quebra de linha, podemos utilizar a tag <br>, para inserir um parágrafo, podemos usar a tag <p>. Veja o exemplo a seguir.
Mensagem utilizando .HTMLBody escrita assim:
“Isso é um <b>teste</b> de <font color=red>mensagem</font> usando <i>HTML</i>.
<br>Esperamos que possa lhe ser útil no seu dia a dia.”
Resultado para quem recebe a mensagem:
Isso é um teste de mensagem usando HTML. Esperamos que possa lhe ser útil no seu dia a dia.
No exemplo acima descrito, o <br> foi inserido direto na mensagem, mas isso ficará estranho para o usuário. Podemos inserir isto automaticamente via código, usando a instrução Replace para converter o VbCrLf em <br>. VbCrLf é uma instrução do VBA que adiciona a quebra de linha. Para usarmos este truque, basta alterar a linha que captura a mensagem no nosso código de envio:
.HTMLBody = Replace(Me!txtMensagem,VbCrLf,"<br>”)
Veja como poderíamos colocar o texto digitado, na mensagem, dentro de uma tabela, com bordas, sem ter que inserir isto, diretamente na mensagem digitada no campo, mas fazendo-o automaticamente pelo VBA:
.HTMLBody =”<table border=2><tr><td>” & replace(me.txtMensagem,VbCrLf,"<br>") _
& "</td></tr></table>"
Agora, vamos supor que você tenha uma imagem em um site da Internet e quer que, além da mensagem ficar dentro de uma tabela com borda, quer também que tenha uma imagem centralizada no topo da mensagem. Vamos acrescentar mais uma tag no nosso código:
.HTMLBody =”<table border=2><tr><td> _
<img src="http://www.seusite.com.br/imagem.jpg" align=center>" & _
replace(me!txtMensagem,VBCRLF,"<br>") & "</td></tr></table>"
Já, as mensagens, utilizando .TextBody, serão enviadas da maneira que forem escritas. Qual é a diferença? Qual é a vantagem e quando utilizar cada uma delas?
Quando precisarmos enviar um texto simples, sem nenhuma formatação, podemos usar o método de envio em forma de texto simples. Se precisarmos formatar palavras em cores diferentes, em negrito, itálico, incluir tabelas, bordas, imagens na mensagem, aí usamos o método em HTML.
Estes são os comandos básicos para o envio de mensagem incluindo anexos, mas podemos incrementar de forma a enviar uma grande lista de anexos, sem precisar colocar um por linha e podendo selecioná-los usando a caixa de diálogo “Abrir arquivo” padrão do Windows. Para isto, poderemos usar o objeto FileDialog, no qual configuramos se pode ser selecionado apenas um ou vários arquivos de uma única vez, entre outras configurações. Usaremos uma caixa de listagem para receber os arquivos e passá-los para a lista de anexos da mensagem a ser enviada. Para tal, vamos supor que a nossa lista de anexos se chama lstAnexos.
Vamos às instruções necessárias, lembrando que a biblioteca “Microsoft Office xx.x Object Library” precisa estar referenciada, sendo xx.x a versão do Access em uso.
A instrução abaixo deve estar no evento “Ao clicar” de um botão, por exemplo:
Faça o login aqui para ter acesso ao código.
Pronto! A nossa lista de anexos já está carregada com os arquivos que iremos enviar junto com a mensagem. Agora, basta trocar as linhas de anexos do nosso primeiro exemplo por algo assim:
Faça o login aqui para ter acesso ao código.
DADOS DE ALGUNS SERVIDORES | |||
SERVIDOR | SMTP | PORTA | SSL |
Bol | smtps.bol.com.br | 587 | False |
Gmail | smtp.gmail.com | 465 | True |
Uol | smtp.uol.com.br | 587 | False |
Terra | smtp.terra.com.br | 587 | False |
IG | smtp.ig.com.br | 465 | True |
iBest | smtp.ibest.com.br | 465 | True |
iTelefônica | smtp.itelefonica.com.br | 587 | False |
Yahoo | smtp.mail.yahoo.com.br | 587 | True |
Hotmail | smtp.live.com | 587 | True |
Aol | smtp.aol.com | 587 | True |
Considerações a cerca do arquivo exemplo
Estamos disponibilizando um exemplo de aplicativo para o envio de emails por CDO, dotado de funções extras e algumas alterações. Veja:
* A listbox de anexos está com duas colunas, sendo a primeira, com o caminho completo do anexo, oculta, e a segunda, apenas com o nome e a extensão do aplicativo. Observe, no código, como isto foi alterado.
* Foi colocado um controle imagem para exibir o anexo, quando neste controle for imagem. Quando o arquivo não for imagem, será gerado um erro. Usamos o número deste erro para fazer o seu tratamento. No tratamento do erro, exibimos uma imagem ou nada será exibido, caso a imagem NoVision.png não esteja na pasta do programa.
* Foi colocado um controle imagem para exibir o anexo, quando for imagem, nesse controle. Quando o arquivo não for imagem, é gerado um erro. Usamos o número desse erro para fazer o seu tratamento. No tratamento do erro, exibimos uma imagem ou não exibe nada caso a imagem NoVision.png não esteja na pasta do programa.
* Dando dois cliques em um anexo, será possível abri-lo em seu programa padrão. Isto é possível graças a uma função inserida em um módulo que acompanha o aplicativo. Esta ação poderia ser executada usando o Shell, mas seria necessário passar o caminho do programa padrão, o que dificultaria as coisas. Com o módulo, é possível abrir qualquer arquivo que tenha um programa associado. Caso não tenha um programa associado, retorne uma mensagem informando isso através de um tratamento de erro.
* Está incluída a possibilidade de excluir anexos da lista, usando a tecla Delete. Estude como isso foi feito no evento “Ao apertar tecla” da listbox.
Baixe o exemplo:
Obs. 1: Alguns blocos de código estão repetidos no exemplo para facilitar a compreensão dos mesmos. Na prática, quando precisarmos repetir procedimentos, bastará colocarmos os códigos em uma função e a chamarmos nos locais que precisarmos dela.
Obs. 2: Foi criado um email no Gmail para que o aplicativo possa ser testado de imediato. Este email é exclusivo para os testes do aplicativo. Veja o endereço e a senha do mesmo no módulo de configuração da CDO.
Com isto, finalizamos aqui, este artigo sobre o envio de emails via CDO. Espero que tenha gostado e que possa ser útil a quem necessitar deste recurso.
Um abraço e até a próxima!
Valdino Campos é um programador autônomo que desenvolve aplicativos sob encomenda, alem de
prestar serviços de informática nos mais variados meios, tais como:
Suporte técnico
Webdesign
Edicão de textos, sons, videos e imagens
Manutenção em computadores e redes
Instrutor de informática.
criquio@hotmail.com
125 comentários Willian Melo 04/01/2024 07:31:55 Olá , parabéns pelo fórum. tenho uma aplicação usando a biblioteca CDO para a microsoft Exchange. Em contato com a microsoft foi orientado a não passar nenhuma porta o servidor smtp é o smtp.office365.com. Na minha base de testes funciona normalmente, em um outro cliente que testei também. Mas na base do cliente que solicitou não funciona, da o seguinte erro "The transport failed to connect to the server." Se eu especifico a porta sendo a 25 funciona normalmente em minha base, mas se passo a 587 da o mesmo erro. Será que poderia me ajudar? Cleber Botelho 16/12/2023 09:59:25 Boa tarde Avelino, esse codigo do CDODSYS, de envio de email sem o outlook, não funcionaou no meu Access 2013, será por que as novas versões no Access nao funcionam mais sem outlook isso? Valmir Cruz 28/11/2022 18:24:48 Prezados, depois de muito tentar, finalmente consegui enviar e-mail usando o CDO e uma conta do gmail. Havia realizado uma infinidade de combinações dos parâmetros e não funcionava. Mesmo ativando a opção "Acesso para aplicativos menos seguros" continuava dando erro e, sem mais nem menos, passou a funcionar. Eu deduzi que a ativação da opção citada acima tem um delay de algumas horas, já que passou a funcionar com os mesmos parâmetros recusados antes. Segue código utilizado: Private Sub Command_Click() Dim cdoMsg As New CDO.Message With cdoMsg With .Configuration.Fields .Item(cdoSendUsingMethod).Value = cdoSendUsingPort .Item(cdoSMTPUseSSL).Value = True .Item(cdoSMTPServerPort).Value = 465 .Item(cdoSMTPServer).Value = "smtp.gmail.com" .Item(cdoSendUserName).Value = "conta@gmail.com" .Item(cdoSendPassword).Value = "senha" .Item(cdoSMTPAuthenticate).Value = cdoBasic .Update End With .From = "conta_remetente@gmail.com" .To = "conta_destinatario@gmail.com" .Subject = "ASSUNTO" .TextBody = "Corpo da mensagem " .AddAttachment " On Error Resume Next .Send End With If Err.Number <> 0 Then MsgBox "CDO error " & Hex$(Err.Number) & vbNewLine & Err.Description, _ vbOKOnly Or vbExclamation, _ Caption Else MsgBox "E-Mail enviado!", vbOKOnly, Caption End If End Sub Guilherme Marcone Ferreira Alves 19/11/2022 08:36:11 Bom dia ANDERSON GALECKI! Estou com o mesmo problema. Você conseguiu resolver? Meu e-mail é: viga@viga.ind.br Guilherme 17/10/2022 12:55:32 Pessoal, bom tarde! Estou tentando utilizar o código abaixo para enviar email no email coorporativo da empresa. Mas aparece esta mesma mesnagem de erro. Poderiam me ajudar, por favor: Private Sub btnSendEmail_Click() Dim iMsg, iConf, Flds Set iMsg = CreateObject("CDO.Message") Set iConf = CreateObject("CDO.Configuration") Set Flds = iConf.Fields 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") = "guilhermehenriquepaiva@colpal.com" 'Configura a senha do email remetente Flds.Item(schema & "sendpassword") = "minhasenha" Flds.Item(schema & "smtpusessl") = 1 Flds.Update With iMsg 'Email do destinatário .To = "guilhermehenriquepaiva@colpal.com" 'Seu email .From = "guilhermehenriquepaiva@colpal.com" 'Título do email .Subject = "Isto é um teste de Envio de e-mail" '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 = "Aprender Excel" 'e-mail de responder para .ReplyTo = "guilhermehenriquepaiva@colpal.com" Set .Configuration = iConf .Send End With Set iMsg = Nothing Set iConf = Nothing Set Flds = Nothing disparar End Sub Sub disparar() MsgBox "O e-mail foi disparado com sucesso!", vbOKOnly, "e-mail enviado" End Sub Vandré Araujo 30/08/2022 10:21:25 Eu uso esse comando do CDO, mas acreditem, tenho diversos clientes que não usam esse recurso no sistema porque ele não grava uma cópia do e-mail que enviam nos itens enviados no servidor de e-mail deles.. Ja vasculhei a internet a procura de um comando que possa fazer isso e não achei. Alguém tem alguma dica, ou conhece um comando do CDO que grave uma cópia no Itens Enviados do servidor de email? Desde já, grato pela atenção ANDERSON GALECKI 06/08/2022 20:24:37 Pessoal, ja estou tentando a muito tempo mas não to achando a resposta para enviar e-mail pelo VBA usando o CDO, podem me ajudar? Olhem o Código: Sub EnviaEmail() Dim iMsg As CDO.Message Dim iConf As CDO.Configuration Dim Flds 'Microsoft CDO deverá estar habilitado em Ferramentas->Referências->Microsoft CDO for Windows 2000 Library Set iConf = New CDO.Configuration Set Flds = iConf.Fields Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "meu_email@gmail.com" Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxx" Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 Flds.Update Set iMsg = New CDO.Message With iMsg Set .Configuration = iConf .To = "outro_email@gmail.com" .From = "Meu Nome" .Subject = "Isto é um teste de Envio de email" .TextBody = "Mensagem enviada com o gmail." .Sender = "meu_email@gmail.com" .Send End With Set iMsg = Nothing Set iConf = Nothing Set Flds = Nothing End Sub Outra coisa, já entrei no link abaixo e ativei na minha conta que pode aceitar app menos seguros: https://www.google.com/settings/u/0/security/lesssecureapps Sério, agora não sei mais o que tentar hahahah... Please help.... :D Avelino Sampaio 27/07/2022 16:00:28 Marcelo, baixe novamente e atente para o tamanho final do arquivo. No aguardo Marcelo Ferreira 27/07/2022 14:21:22 Boa noite! Pessoal consigo baixar o arquivo mais não consigo descompactar, da uma mensagem. que a pasta EmailCDO.zip é invalida. baixei outros exemplos foi normal. grato! Valter (só sistema software) 13/04/2022 13:59:34 Olá, experimente criar um e-mail de envio no yahoo, passei pelo mesmo problema e fiz isso resolveu... cicero maia 20/03/2022 10:55:03 Avelino e Colegas, Primeiro parabenizo a todos que compartilham suas dicas e truques, ams estou com um problema ao enviar os emails usando o CODSys, seguinte tenho um conjunto de emails em lote(82 no total) para ser enviado, quando eu os envio para mim mesmo, tudo bem, sem problemas, mas quando envio em nome de outras pessoas, tenho um retorno de erro que diz assim: Erro em tempo de execução '-2147220975 (80040211)': Não foi possível enviar a mensagem para o servidor SMTP. O código de erro de transporte foi 0x800ccc67.A resposta do servidor foi 421 4.3.2 The Maximum number of concurrent connections has exceeded a limit, closing transmission channel. esta é a menssagem de erro, estou usando um servidor interno na empresa onde trabalho, que no caso é um Exchanger Server, a minha aplicação é feita em Access 2007, quando eu rodo a rotina apenas 20 emails são enviados e os demais não são. Eu fico grato se alguem poder me ajudar, se caso alguem já tenha visto este tipo de erro, fico feliz em ser ajudado. Grato pela atenção a todos. Eduardo 09/03/2022 13:22:06 Parabéns pelo site, Sempre muito esclarecerdor. Bom estou tendo dificuldade na solução. Sistema com Lista de e-mails, mais de 300 para enviar. Utilizando o código abaixo com .Display, funciona porém trava informando problema de memoria. Utilizando .Send, trava de primeira, "O Outlook não reconhece um ou mais nomes". Do que se trataria? Os endereços de e-mail estão listados em tabelas e discriminados na rotina. Obrigado pela ajuda ***************************************************** On Error Resume Next Set appOutlook = GetObject(, "Outlook.Application") If appOutlook Is Nothing Then Set appOutlook = CreateObject("Outlook.Application") End If On Error GoTo 0 Set olMail = appOutlook.CreateItem(0) '0 é um item de e-mail With olMail .SentOnBehalfOfName = "emal que utilizo para envio" .To = email .Subject = "SOLICITAÇÃO DE CÓPIA DE DOCUMENTO - ENCERRAMENTO SEM ATENDIMENTO" .HTMLBody = TextoIncial & CabecalhoTabela & strSQL & FimTabela & TextoFinal .Display ' **** ao utilizar .Send ocorre erro (O Outlook não reconhece um ou mais nomes.) MsgBox "Sem mais e-mails" End With Feltz 24/02/2022 05:38:24 Pessoal, Apenas compartilhando. Estava gerando o erro "falha na conexão do transporte com o servidor" para o Hotmail. Então usei a porta 25 e funcionou. Abç, LR Feltz WELSON 15/01/2022 10:43:10 Bom trabalho! Amigo gostaria de informar que se configuro um e-mail de meu dominio para enviar: e-mail's como gmail, outlook, não recebem, mesmo alterando a segurança ssl. Já quando configuro o gmail, yahoo, outlook e outros envia para todos. Como pode resolver isso? Bruno 12/12/2021 14:41:10 Adelino, boa tarde, Estou com um problema: error '80040211' /envia_cadastro2.asp, line 163 Na linha 163 está o seguinte código: 'envia o e-mail' objCDOSYSMail.Send Já tentei de tudo para resolver, ja troquei o smtp, já mudei a senha, já entrei em mil tutoriais e nada. Esse foi o primeiro tutorial no qual eu vi um monte de perguntas, um monte de respostas e muitas soluções, sabe o que pode estar acontecendo? Obrigado arnaldo 05/12/2021 09:20:16 Cara essa dica da segurança salvou o dia. Muito boa mesmo. Vandré 21/11/2021 11:11:38 Estou com um pequeno probleminha ao enviar e-mail pelo access com o método CDO, o erro que retorna é esse ao enviar o e-mail: o endereço de e-mail do destinatário foi recusado, mensagem de erro getting "530 5.7.0 Must issue a STARTTLS command first." A rotina usada é conforme o exemplo no site: http://usandoaccess.com.br/tutoriais/tuto38.asp que funcionou muito bem no meu computador porem em alguns sistemas operacionais retornou esse erro acima. Rodei nos seguintes sistemas operacionais: No Win XP SP3 funcionou; no Win XP SP2 não; no Win 7 64b funcionou; no win 7 32b não. Smtp usado é: smtp.live.com Porta: 587 conexão segura: false, se mudo pra true o erro é outro. no live o padrão é false mesmo. Ronilson 15/11/2021 21:45:27 Parabens pelo travalho Valdino ja estou fazendo maravilhas com os codigos fornecido. Continue este trabalho poucos são os genios que compartilham suas descobertas. []´s Ronilson Silva Avelino Sampaio 14/11/2021 07:34:55 Ademir, muito obrigado por compartilhar sua excelente dica! Sucesso! ADEMIR 13/11/2021 01:04:04 Descobri o que era... O gmail precisa ser liberado para uma conexão menos segura, acessando o endereço: https://www.google.com/settings/u/1/security/lesssecureapps ATIVANDO A OPÇÃO: "Acesso para aplicativos menos seguros" Achei importante postar o resultado. Obrigado... ADEMIR 12/11/2021 18:57:22 Olá amigos, Desde já agradeço ao grande acervo de informações que encontrei aqui. Porém estou tentando utilizar o exemplo no access 2003 e esta retornando o seguinte erro: Erro em tempo de execução '-2147220973 (80040213)' Falha na conexão do transporte com o servidor copiei o código de: (Mendes 28/10/2011 15:51:24) sei que é um post antigo mas se puderem me ajudar ficarei muito agradecido ----- Public Function EnviarEmail() Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .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") = "meu_email@gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields.Update End With Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = "ADEMIR" .Sender = "meu_email@gmail.com" .ReplyTo = "meu_email@gmail.com" .BodyPart.Charset = "utf-8" .Subject = "texto do assunto" .HTMLBody = "texto da mensagem" .To = "xxx@gmail.com" .Send End With End Function ----- Valdino 19/10/2021 18:49:29 Julio, sua conta do yahoo é paga ou gratuita? Porque as contas gratuitas não permitem uso do smtp e pop fora do webmail deles. Julio 19/10/2021 17:10:19 Amigos... não estou conseguindo aplicar o código abaixo no Yahoo... erro O CAMINHO DA PASTA DE ESCOLHA É NECESSÁRIO E NÃO FOI ESPECIFICADO.. Alguem pode me ajudar ??? segue meu código: Sub teste_2() Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.yahoo.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 .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") = "xxxxx@yahoo.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields.Update End With Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = "teste" .Sender = "teste@yahoo.com.br" .Subject = "pedido de ajuda" .TextBody = "teste" .To = "teste@yahoo.com.br" .Send '(onde acusa o erro) End With Set Mens = Nothing Set Config = Nothing End Sub Hephraim BF 07/10/2021 08:29:35 Excelente, muito bom cara! Valeu! Avelino Sampaio 07/10/2021 07:07:41 Helphraim, Copie a função abaixo para um módulo global: Public Function fncServidorEmail(strEmail) As String Dim Pos As Byte, Pos2 As Byte Dim strServer$ Pos = InStr(strEmail, "@") Pos2 = InStr(Mid(strEmail, Pos + 1), ".") fncServidorEmail = Mid(strEmail, Pos + 1, Pos2 - 1) End Function Use a função para capturar o servidor: Me!nomeServidor = fncServidorEmail("nomedapessoa@gmail.com") Sucesso! Hephraim BF 06/10/2021 13:21:26 Como faço para capturar apenas o servidor de e-mail no e-mail digitado? Por exemplo: nomedapessoa@gmail.com, captura: gmail Valdino 05/09/2021 20:04:33 Eu coloco mas quando o email dispara dispara com "氄 " esse simbolo em todos campos memorandos. estou usando .htmlbody = CorpodoEmail Segue meu código, o email vai só que o erro são os campos memorandos Function Envia_Email() Dim OutApp As Object Dim OutMail As Object Dim db As Database Dim rc As Recordset Dim copia As String Dim remetente As String Dim Destina As String Dim corpoEmail As String Dim titulo As String Dim Principal_Envolvido As String Dim Nome_Cliente As String Dim CPF_CNPJ As String Dim Agencia As String Dim Conta_Corrente As String Dim OS As String Dim Ano As String Dim Motivo_da_Analise As String Dim Risco_Identificado As String 'Campo Memorando Dim KYC As String 'Campo Memorando Dim myrec As Recordset Set db = CurrentDb() Set rc = db.OpenRecordset("Tb_", dbOpenTable) While rc.EOF = False Destina = "Amanda Aragão Soares" Nome_Cliente = rc![Nome_Cliente] CPF_CNPJ = rc![CPF_CNPJ] Agencia = rc![Agencia] Conta_Corrente = rc![Conta_Corrente] Ano = rc![Ano] OS = rc![OS] Motivo_da_Analise = rc![Motivo_da_Analise] Risco_Identificado = rc![Risco_Identificado] Call EnviaDestina(Destina, remetente, copia, Nome_Cliente, CPF_CNPJ, Agencia, Conta_Corrente, Ano, OS, Motivo_da_Analise, Risco_Identificado) rc.MoveNext Wend Set OutMail = Nothing Set OutApp = Nothing MsgBox ("Email Enviado") End Function Public Function EnviaDestina(Destina As String, remetente As String, copia As String, Nome_Cliente As String, CPF_CNPJ As String, Agencia As String, Conta_Corrente As String, Ano As String, OS As String, Motivo_da_Analise As String, Risco_Identificado As String) Set OutApp = CreateObject("Outlook.Application") OutApp.Session.Logon Set OutMail = OutApp.CreateItem(0) corpoEmail1 = ("Prezados, ") & (" ") & (" Pedimos uma posição sobre. ") & (" ") corpoEmail2 = ("Dados do Cliente: ") & (" ") & ("Nome: ") & Nome_Cliente & (" CPF_CNPJ: ") & CPF_CNPJ & (" Agência: ") & Agencia & (" CC: ") & Conta_Corrente & (" N° OS: ") & OS & ("/") & Ano & (". ") corpoEmail3 = (" Motivo da Análise: ") & Motivo_da_Analise & (" ") & (" ") & ("KYC: ") & KYC & (" ") & (" ") & (" Risco Identificado: ") & Risco_Identificado corpoEmail = corpoEmail1 + corpoEmail2 + corpoEmail3 titulo = "Despacho de Memorandos" With OutMail .To = Destina .Subject = titulo .htmlBody = corpoEmail .Send End With End Function Valdino 05/09/2021 19:12:32 Olá Amanda. Veja aonde tem ".TextBody = Me.txtMensagem". Você pode colocar o nome do campo memorando no lugar de txtMensagem. Amanda 05/09/2021 18:59:47 Como faço para que um campo memorando apareça na integra quando eu envio um email atraves de um código vba? Existe alguma maneira? Valdino 31/08/2021 09:14:39 Carlos, que erro que dá? Quando você clica em Depurar, marca qual linha no VBA? Já verificou se não tem alguma referência AUSENTE indo em um módulo do VBA, no menu Ferramentas>Referências? O botão de anexo não faz uso do CDO, ele apenas busca arquivos e os insere na lista de anexos. CARLOS EDUARDO 30/08/2021 21:21:47 VERIFIQUEI O EXEMPLO CONSEGUI CONVERTER O MESMO PARA VERSAO ACCESS 2000 . AJUSTE A CONFIGURAÇÃO DE EMAIL FOI ENVIADA SEM PROBLEMAS . QDO CLICO NO BOTAO ANEXO DA ERRO. AONDE EU DECLADO AS VARIAVEIS CDOSYS Valdino 02/08/2021 17:08:46 Sérgio Augusto, veja se ajuda: http://forum.imasters.com.br/topic/501231-enviar-e-mail-com-cdo-atravs-do-exchange-corporativo/ Avelino Sampaio 02/08/2021 09:10:53 Marcelo L. Obrigado por compartilhar com esta solução maravilhosa! Sucesso! NELIO LIMA DA SILVA 01/08/2021 14:22:00 Qual o valor do retorno (erro) quando o email é enviado com sucesso? E qual a função de 'Resume Next'? erromail: If Err.Number = 13 Then Resume Next ElseIf Err.Number = -2147220979 Then DoCmd.Close acForm, "frmProgresso" MsgBox "Você inseriu um endereço de email inválido ou inexistente." & vbCrLf & "Verifique o email e tente novamente.", vbOKOnly + vbCritical, "Email inválido" DoCmd.Close acForm, "frmFinalizar" Me.txtEmail.SetFocus Else Resume Next End If Marcelo L. 31/07/2021 19:58:27 Boa noite a todos! Vim pra trazer um boa notícia! Estive envolvido e decidido a fazer funcionar o terra e outros emails que não estavam funcionando. Pois bem, deu certo! Meus caros, segue abaixo como fazer... .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.terra.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 .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") = False .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "*****@terra.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "*****" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 Mais abaixo, conforme no arquivo deve-se acrescentar (.TO), pois o (.SENDER) é onde ele fará a autenticação e não quem envia (deu pra entender?) Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = Me.txtnome2 .Sender = Me.txtnome2 'QUEM ESTÁ ENVIANDO .To = Me.txtEmail 'DESTINATÁRIO Espero que possa ajudar, caso não consigam, postem que tentarei ser mais claro! Grande abraço!! viva o Access! Rui Ferreira 14/07/2021 16:17:19 Valeu, o download foi uma grande ajuda. Avelino Sampaio 14/07/2021 01:02:08 Fernando, altere de 1 para 2 a seguinte linha: ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 Sucesso! Fernando 13/07/2021 15:15:33 Recebo a mensagem abaixo ao tentar enviar email com as em um Windows Server 2012 CDO.Message.1 erro '80040222' O caminho da pasta de escolha é necessário e não foi especificado. Segue meu código: <% 'Cria o objeto CDOSYS Set objCDOSYSMail = Server.CreateObject("CDO.Message") 'Cria o objeto para configuração do SMTP Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration") 'Servidor SMTP que será utilizado para enviar o e-mail objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "meuservidor.com.br" 'Porta do SMTP objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")= 587 'Porta do CDOSYS - smtp autenticado = 1, não atenticado = 2 objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 'Timeout de conexão com o Servidor SMTP objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10 objCDOSYSCon.Fields.update 'Atualiza a configuração do CDOSYS para envio do e-mail Set objCDOSYSMail.Configuration = objCDOSYSCon 'Configura o remetente do e-mail ' objCDOSYSMail.From = "Sociedade Brasileira de Física objCDOSYSMail.From = "remetente@meuservidor.com.br" 'Your UserID on the SMTP server objCDOSYSCon.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email@adassd.br" 'SENHA DO USUÁRIO PARA SMTP AUTENTICADO objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xcxcxcxc" 'Configura o destinatário(TO) objCDOSYSMail.To = "destinatario@provedor.com.br" 'Configura o Reply-To(Responder Para) objCDOSYSMail.ReplyTo = "remetente@meuservidor.com.br" 'Configura o Bcc(Com Cópia Oculta) objCDOSYSMail.Bcc="" 'Configura o assunto(SUBJECT) objCDOSYSMail.Subject = "Testando" 'Configura o conteúdo da mensagem objCDOSYSMail.TextBody = "Testando" 'Enviado um arquivo em Anexo objCDOSYSMail.AddAttachment "" objCDOSYSCon.Fields.update ' ### ENVIA O E-MAIL ### objCDOSYSMail.Send Set objCDOSYSMail = Nothing Set objCDOSYSCon = Nothing %> Avelino Sampaio 07/07/2021 10:36:53 Pedro, o terra bloqueia e ninguém aqui conseguiu decobrir como contornar o problema. Use o Gmail que não terá problemas. Sucesso! Pedro Almeida 06/07/2021 11:20:59 Bom dia amantes do Access. Não sei se a pergunta acima já foi respondida, mas estou tentando enviar do meu terra e não consigo. Alguém já conseguiu? ps: Avelino, parabéns pelo site! Sérgio Augusto 20/06/2021 10:50:17 Olá! Estou tentando utilizar as configurações abaixo para enviar msg pelo nosso servidor corporativo (Exchange 2010 -instalado recentemente), no entanto, ocorre o erro: "O CAMINHO DA PASTA DE ESCOLHA É NECESSÁRIO E NÃO FOI ESPECIFICADO". Enquanto o nosso servidor foi o UOL Host, funcionava perfeitamente. Qual é a configuração para quem usa servidor próprio? .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "LOCALHOST" .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 .Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "sergio@xxxxxxx.com.br" 'user do servidor .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "sergio123" 'coloque a senha do seu email .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True Att., Sérgio s-augusto-anjos@bol.com.br Valdino 11/06/2021 08:43:13 Rafael, faça um Loop pelo Recordset e vá armazenando os emails em uma variável e depois utilize essa variável: -------------------------------------------------------------------------------- Dim Lista As String, rs As Recordset Lista = "" Set rs = CurrentDb.OpenRecordset("SELECT CampoEmail FROM NomeTabela WHERE NomeCampo='Termo a pesquisar'") Do While Not rs.EOF If Lista = "" Lista = rs!CampoEmail Else Lista = Lista & "," & rs!CampoEmail End If rs.MoveNext Loop rs.Close Set rs = Nothing -------------------------------------------------------------------------------- Pronto, você tem todos os emails listados na variável Lista Ivan 10/06/2021 17:27:25 Boa tarde Avelino belíssimo tutorial, porem não estou conseguindo configurar com um email da mandic, não apresenta erro porem o destinatário não recebe o email, pode me ajudar? Rafael 10/06/2021 15:06:36 e como fazer para no campo "Para" procurar diversos e-mails de uma tblclientes no mesmo bd e selecionar para mais de 1 destinatário??? Camilo 22/05/2021 11:38:59 Cara precisaria de quando checasse o outlook ele identificasse (access) o que atualizar. Estou atrás disso pela internet e sei que é possivel.. mas não sei como!! hehehe.. Valeu FLAVIO 21/05/2021 20:51:20 Camilo, cara sei que tem como mandar um e-mail para as pessoas que tu deseja o cadastro e quando elas enviam, ele atualiza. Não sei se é isso que tu precisa. Abraços Camilo 20/05/2021 04:46:58 Pessoal algem saberia como fazer o access 2007 captar os dados do outlook. recebo uns emails de um site e queria que ele pegasse é possivel? Obrigado Kiriath 15/05/2021 10:19:29 Parabens ao Valdino bem como aos companheiros que acrescentaram suas sujestoes. Daniel (velloso2008@gmail.com) 11/05/2021 23:25:46 Prezados, realmente não consegui nada! Falei com "todos" os responsáveis pelo suporte do terra e nada de resolver esse problema. A solução que encontrei foi no campo DE: colocar o nome, no caso DANIEL e no reply daniel@terra.com.br (apenas exemplos). Porém, estou com uma dificuldade. O meu programinha, fiz para todas as janelas aparecerem maximizadas, e quando surgem os formularios de "enviando mensagem" e "mensagem enviada", simplesmente o que está "atras" fica encoberto. Pergunta: como poderia fazer para essas informações aparecessem no principal (frmEmail), digamos que em cima do espaço Mensagem, eu baixaria um pouco esse espaço e colocaria um espaço não acoplado para aparecer ali. Teria como? me fiz entender?? muito obrigado meus amigos pelo auxilio e empenho. Grande abraço!! Valdino 03/05/2021 15:45:03 Pessoal, andei fazendo alguns testes mas parece que por enquanto precisarão utilizar outro provedor para enviar emails via CDO. Tentei todas as configurações possíveis e até o momento nada. Talvez se vocês entrarem em contato com o suporte do Terra, eles possam dar alguma sugestão. Velloso 03/05/2021 14:03:12 Pelo visto também não sou o único com problemas com o terra. Ninguem saberia resolver esse problema?? Wanderson 30/04/2021 16:44:22 Pessoal, estou com o mesmo problema com o terra, não funciona de jeito nenhum. Almir Gobbo 30/04/2021 16:39:15 Ok. Obrigado pelo pronto retorno. Valdino 30/04/2021 16:22:35 O hotmail está mesmo dando muita dor de cabeça. Se possível, use uma conta do gmail que até o momento não está atrapalhando nossas vidas. Almir Gobbo 30/04/2021 13:19:29 Ola Valdino, As unicas alterações que fiz foram porta, smtp e ssl, relativas ao Hotmail, conforme o artigo indica. Porem não resultaram em nada. Quando a verificar porta bloqueada pelo firewall ou modem, não sei como faze-Lo. Poderia me dar uma dica. Uma outra duvida que me surgiu (quando conseguir enviar mensagens) é como saberei para qual servidor devo configurar o envio (hotmail, Gmail, etc). Peço desculpas pelo incomodo e te agradeço mais uma vez. Abraços Valdino 29/04/2021 21:50:41 Almir Gobbo, tente enviar utilizando o exemplo novamente. Se der certo, pode ser alguma alteração que você fez que esteja atrapalhando. Verifique as portas, o email e a senha inseridos para ver se está tudo correto. Veja tambem se a porta utilizada para o envio não está bloqueada ou se precisa liberá-la no firewall ou no modem. Almir Gobbo 29/04/2021 18:12:37 Boa Noite. Após a instalação e envio de alguns e-mails, mesmo recebendo a mensagem "Mensagem Enviada", sem apontar nenhum erro os e-mails ficam em minha caixa de saida e não são disparados.Poderiam me dar uma luz. (Access 2007 Windows Xp prof. sp3) Grato antecipadamente Daniel 28/04/2021 12:07:52 Amigos, obrigado pelo esforço!! Para ajudar, caso nao tenham um email terra, criei um. usuario: testecdo@terra.com.br senha: 12345678 grande abraço, Avelino Sampaio 27/04/2021 09:03:44 Daniel, o Valdino está investigando a razão de naõ funcionar com o Terra. Vamos ver se até segunda temos uma resposta para o caso. Grato! Daniel 26/04/2021 21:06:06 Que coisa, ta dificil resolver esse problema do smtp do terra.. Ninguem sabe?? Abracos FALCAO 25/04/2021 14:20:13 Alguem saberia fazer aparecer o nome ao invés do e-mail no recebimento? ao invez de falcao@gmail.com aparecer apenas FALCAO? Obrigado gilson 25/04/2021 01:03:30 Oi pessoal, estou com o mesmo problema do daniel, não consegui fazer funcionar com o terra, mesmo com as alterações que o valdino passou. O que posso fazer???? valeu Flavio SP 24/04/2021 17:04:01 Daniel acho que usando o terra tu nao vai conseguir utilizar.. parece que e necessario especificar uma porta de cliente.. uma coisa assim.. so se os mestres valdino e avelino souberem resolver.. abs Daniel 23/04/2021 20:09:07 Caro amigo Valdino, Realmente a porta mudou de 25 para 587, porém não tive sucesso.. Mais alguma idéia? Abraço!! Valdino 23/04/2021 19:54:17 Daneil, tente alterar as duas linhas abaixo assim: ... .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587 ... .Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True ... Daniel 23/04/2021 19:22:55 Prezados, alguem saberia dizer como faço pra utilizar o terra neste exemplo? Fiz de tudo, porém, nada! .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.terra.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .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") = False .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxxx@terra.com.br" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 abraços!! Valdino 31/03/2021 15:33:33 Olá Alexandre! Você quer obter informações sobre a mensagem após o envio da mesma? Ou seja, que o servidor informe esses dados? O CDO tem como função apenas o envio da mensagem. Qualquer retorno ou operação inversa, ou seja, recebimento de mensagens, pode ser conseguido de outra forma, como por exemplo, usando winsock ou criando um objeto do OutLook para gerenciar mensagens recebidas. Alexandre Calicchio 30/03/2021 13:18:11 Caro Valdino, Saberia dizer se exite a possibilidade de obtermos informações sobre a mensagem enviada, como exemplo: a data de envio do servidor, respostas referente a mensagem enviada, etc. Obrigado Felipe Stahlhofer 28/03/2021 14:52:11 .AddAttachment CurrentProject.Path & "\Enviados\" & "Orcamento" & Me!idOrcamento & ".pdf" Esqueci de retirar o P no exemplo anterior. Felipe Stahlhofer 28/03/2021 14:34:24 WSenna, o meu relatorio é gerado pelo id do orçamento que está presente no formulário no campo conforme eu escolhi, ao clicar ele salva em uma pasta chamada "enviados" com o numerodoid.pdf, tente adaptar o seguinte: Private Sub NomeBotao_Click() Dim strArquivo As String Dim strLocal As String If IsNull(Me!idOrcamento) Then Exit Sub strArquivo = "Orcamento" & Me!idOrcamento & ".pdf" strLocal = CurrentProject.Path & "\enviados\" & strArquivo If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord DoCmd.OpenReport "rltOrcamento", acViewPreview, , "idOrcamentoP= " & Me!idOrcamento, acHidden DoCmd.OutputTo acOutputReport, "rltOrcamentoP", acFormatPDF, strLocal DoCmd.Close acReport, "rltOrcamento" End Sub Depois acrecente no código do Avelino de mandar email o seguinte: .AddAttachment CurrentProject.Path & "\Enviados\" & "Orcamento" & Me!idOrcamentoP & ".pdf" WSenna 23/03/2021 17:17:45 Todos nós sabemos que podemos salvar um relatório em pdf, certo? Então, estive pensando aqui com meus botões: Será que não haveria uma forma de ao clicar em anexar o sistema gerasse o relatório em pdf e o anexasse para envia-lo por e-mail? Abraços, WSenna Valdino 23/03/2021 11:52:40 Olá Eduardo! Coloque a imagem em em servidor na Internet e envie a mensagem no modo html e utilize a tag para pegar a imagem: .HTMLBody = Me.txtMensagem & "< br >< img src="http://www.servidor.com.br/nomeimagem.jpg" > Retire os espaços dos sinais < e >. Eduardo Rubio 23/03/2021 11:28:22 Ola galera..... Pesquisei em varios topicos, mas nada parecido... Como no Outlook a assinatura digital aparece ao destinatario de e-mail como imagem ou como html, mas o destinatario não recebe como anexo. Como fazer isso usando o ms access? Estou usando o seguinte codigo: .AddAttachment "C:\Enviar-E-Mail\LOGO.jpg" >>>Neste caso envia como anexo !!! (Como colocar sem aparecer como anexo????) WSenna 22/03/2021 22:57:33 Melhor que isso só dois disso. Perfeito em tudo na explicação de cada fragmento do código, e no exemplo disponibilizado. Parabéns, cara Um grnade abraço. Avelino Sampaio 13/03/2021 07:32:43 Joseny, Leia com atenção os comentários que pode ter a solução para o seu caso. Procure usar o email do Gmail que é menos problemático. Pelo menos faça testes preliminares com o do gmail e depois então com o email da sua empresa. Sucesso! Joseny Freire de Carvalho Gonçalves 12/03/2021 16:50:27 Prezados, Tentei rodar o programa que foi disponibilizado e não consegui, mesmo fazendo algumas alterações. Alguém poderia me informar quais informações eu teria que alterar no fonte para rodar aqui na minha empresa, com as características da minha rede? Obrigado! Att, Madson Braz 11/03/2021 17:18:50 Sabe informar se existe alguma restrição para mensagens html, pois quando uso um determinado código html, a mensagem não é enviada(embora todo o processo siga sem problemas). Valdino 11/03/2021 13:40:31 Bruno, é só utilizar o smtp do hotmail que deve funcionar. Leia o artigo com atenção e verifique na tabela as configurações para o Hotmail. Ainda existindo dúvidas, retorne. Abraço. Valdino 11/03/2021 13:39:21 Marcio Melo, acredito que não esteja nos planos da Microsoft interromper o suporte ao CDO, uma vez que ele existe já a mais de uma década. Antes ele era chamado de CDONT. Acredito que podemos ficar descansados a esse respeito. Ficamos felizes que tenha gostado do artigo e que ele tenha sido útil. Abraços. Bruno 09/03/2021 11:12:12 Bom dia, senhores. Sou um pouco leigo no assunto em questão, contudo gostaria de saber como criar uma rotina para enviar e-mail no access já pelo Hotmail. Preenchendo somente os dados do cliente, sem nem precisar abrir a Internet. Desde já, agradeço. Vileman 02/03/2021 18:19:04 Valdino, já consegui resolver com ajuda dos colegas Balem e Norbs do Fórum Máximo Access. Obrigado. Marcio Melo -RJ 16/02/2021 15:50:05 Tive de fazer uso deste método de enviar por e-mail e gostei muito pois já deixei o envio todo automatizado, anexando 2 arquivos exportados em xls preenchendo os e-mail para, cc, co - assunto - mensagem basta a pessoa ver e conferir e clicar no enviar, para o smtp deixei a minha própria conta do gmail. Funcionando tudo perfeitamente, a única preocupação é por quanto tempo a microsoft vai deixar... Trata de um programinha para rodar em diversos terminais de carga e quando virar o mês gerar e enviar 2 relatórios em xls para um mesmo lugar onde os dados serão importados e assim gerar a estatista... estamos e fase de implantação... Muito obrigado! Sr. Valdino e Avelino Sou mais Brasil! Vileman 07/02/2021 18:15:09 Caro Valdino, gostaria de sua ajuda no que segue, mas antes de tudo quero parabenizá-lo novamente pela nova versão do EmailCDO que agora ficou melhor e mais completa (arquivos: emailCDO.mdb e EmailCDO_be.mdb - com opções extras). Já estava utilizando a 1ª versão, a intenção agora é substituir por esta melhor. Ao abrir o arquivo para fazer meus testes e estudos aconteceu o seguinte: * P.S.: Uso Access 2003 com Windows 7 Ultimate 64 bits 1) Ao abrir apareceu a mensagem de erro: Não foi encontrada a Referência ACEDAO.dll versão 12.0; 2) ao abrir a estrutura e clicar em Ferramentas\Referências mostra: AUSENTE: Microsoft Office 12.0 Access Database Engine Object Library; 3) Desmarquei a Referencia acima e testei novamente, e ao clicar no botão enviar do Formulário: frmEmail aparece a seguinte mensagem de erro: "O tipo definido pelo usuário não foi definido" e aponta para a linha onde tem "Dim db As DAO.Database". A mensagem do item 1 não mais apareceu; 4) A mesma mensagem de erro do item 3 acontece nos demais Formulários: frmGrupos, frmContatos e frmPesquisa Eder 31/01/2021 17:38:27 Avelino muito obrigado deu certo. Avelino Sampaio 31/01/2021 05:38:53 Eder, copie o link abaixo e abra no seu navegador. Irá encontrar no tópico várias técnicas. http://comunidade.itlab.com.br/eve/forums/a/tpc/f/273606921/m/4267061033?r=4267061033#4267061033 Bom estudo! Eder 30/01/2021 20:17:54 Valdino Boa noite, preciso de antes de enviar o email fazer a verificação com a internet, para ter certeza q o email sera enviado. Grato. Valdino 27/01/2021 19:47:49 Olá Fernando. Basta você ter uma tabela para os usuários e nela cadastrar os emails, senhas, portas, etc, e na hora de enviar os emails pegar esses dados. Supondo que a tabela se chama tblUsers e os campos são Usuario, Email, Senha e Porta e que você tenha um campo no formulário com o nome do usuário chamado txtUser: varEmail = DLookup("Email", "tblUsers", "Usuario='" & Me.txtUser & "'") varSenha = DLookup("Senha", "tblUsers", "Usuario='" & Me.txtUser & "'") varPorta = DLookup("Porta", "tblUsers", "Usuario='" & Me.txtUser & "'") Basta usar esses dados no lugar dos dados do código. Fernando Luís Guimarães 23/01/2021 22:56:37 Boa noite, sou leigo no assunto e gostaria de saber se tem como eu criar dentro do meu sistema um email para cada usuario do mesmo, exemplo, o funcionario 1 clica em enviar orcamento, o mesmo sera enviado pelo smtp do funcionario1, o funcionario 2 idem, cada usuario cadastrado com sua conta de e-mail, existe essa possibilidade? pois hoje meu sistema, qdo clico em enviar e-mail, ele abre o outlook, mas gostaria que o orcamento por exemplo, fosse disparado pelo sistema, desde já agradeço. Valdino 21/01/2021 09:34:07 Edson, se você tem todos os dados a serem enviados cadastrados no sistema, basta fazer um loop utilizando um Recordset na tabela para ir enviando os emails. Para isso, basta que tenha os emails na tabela de clientes. Edson 18/01/2021 19:32:59 Preciso enviar boletos de cobrança por e-mail. Nesse caso eu teria que gerar os pdfs de cada cliente em uma pasta e depois enviar um a um. Essa seria a melhor forma? Gladiomir Dutra 08/01/2021 18:49:21 Cara vocês são gigantes nisso que Deus abençoe vocês nunca mais nuca vi alguem que trabalhasse no Acess tão bem como vocês Marcelo Brandão 21/12/2020 17:49:37 Valdino, Boa tarde Me chamo Marcelo, estou implementando uma ferramenta no VBA do Access que faz este procedimento de enviar as informações via e-mial. Desde já muito obrigado, seu código me ajudou a ter um rumo. Configurei minha biblioteca do CDO no Access com Microsoft CDO For Exchange 2000 Library e Microsoft CDO 1.21 Library (meu access é 2003). Peço sua ajuda. Com o Código abaixo implementado no botão o sistema enviou o seguinte erro: Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .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") = "fulano@gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields.Update End With Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = "fulano" .Sender = "fulano@gmail.com" .BodyPart.Charset = "utf-8" .Subject = Me.txtAssunto .TextBody = Me.txtmsg .To = "ciclano@hotmail.com" .Send End With Set Mens = Nothing Set Config = Nothing Valdino 16/12/2020 10:36:20 Gilvan, você já pesquisou o termo no módulo para ver se o encontra para retirá-lo? Gilvan Junior 08/12/2020 16:32:33 Valdino , quando mando um email pelo servidor chega da seguinte forma: "email@email.com.br em nome de email@email.com.br" como faço para tirar esse "em nome de" Valdino 07/12/2020 10:56:39 Eder, não captei muito bem qual é a intenção. Enviei um email para ccsregistros@gmail.com exemplificando para melhor entendimento. Eder 07/12/2020 09:44:16 Valdino muito obrigado quanto a formatação condional ficou muito bom, quanto ao conversor de txt para html é q quando vou digitar o corpo do email gostaria q ja automaticamente converte-se para html estou tendo muitas dificuldades para fazer o comando. Grato. Valdino 05/12/2020 23:51:02 Eder, tente criar uma cópia do arquivo com a extensão html. Quanto à cor da caixa de texto com foco, eu usei Formatação condicional. Eder 05/12/2020 14:08:37 Valdino me desculpe a ignorancia mas no exemplo do email. No momento que a caixa de texto recebe o foco a cor de fundo é alterada, procurei o comando BackColor no evento ao receber foco mas não encontrei, como é feito? Grato. Eder 05/12/2020 11:54:48 Valdino muito obrigado, deu certo. Gostaria de saber se vc tem algum exemplo de conversor de txt para html. Grato Valdino 02/12/2020 12:42:54 Olá Eder. Em primeiro lugar, agradeço pela visita e pelos comentários. Eu nunca usei conta de email da Globo, mas segundo acabei de ler em alguns links que pesquisei aqui, a globo passou a usar a engine do gmail e portanto, estaria usando o protocolo smtp do gmail. Portanto, tente alterar de "smtp.globo.com" para "smtp.gmail.com". Espero que seja isso mesmo. Abraço. Eder Castro 02/12/2020 10:08:25 Parabéns Valdino Campos muito bom o tutorial sou fã do site. Estou com problemas para configurar o envio de email com o servidor globo estou usando SMTP = smtp.globo.com Porta = 25 SSL = True mas não consigo enviar, alguma sugestão. Grato Celso Henrique 25/11/2020 07:00:52 Muito bom. Mágico Parabéns Valdivino e Avelino. Renato Siva 17/11/2020 11:13:16 Ótimos exemplos usando o CDO. Gostaria de melhorar esta rotina em duas coisas, pesquisei bastante mas não consegui nenhuma evolução: 1) Mandar o e-mail com Confirmação de Leitura 2) Mandar e-mail CDO num ambiente com proxy Lendo alguns artigos, tentei os seguinte parâmetros: .Fields("http://schemas.microsoft.com/cdo/configuration/urlproxyserver") = "Informe aqui a Url do ProxyServer" .Fields("http://schemas.microsoft.com/cdo/configuration/proxyserverport") = "Informe aqui a Porta do ProxyServer" Mas sem sucesso. Mendes 28/10/2020 15:51:24 Este é do gmail, funciona blz. On Error GoTo erromail Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .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") = "xxxxx@gmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields.Update End With Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = Me.txtNome If Not IsNull(Me.txtEmail) Then .Sender = Me.txtEmail End If If Not IsNull(Me.txtCC) Then .CC = Me.txtCC End If If Not IsNull(Me.txtCCO) Then .BCC = Me.txtCCO End If .ReplyTo = "xxxxx@gmail.com" .BodyPart.Charset = "utf-8" .Subject = Me.txtassunto .HTMLBody = Me.txtMensagem .To = Me.txtEmail Dim L As Long If Me.lstAnexos.ListCount > 0 Then For L = 0 To Me.lstAnexos.ListCount - 1 .AddAttachment Me!lstAnexos.Column(0, L) Next L Else End If .Send End With Set Mens = Nothing Set Config = Nothing DoCmd.OpenForm "frmFinalizar" erromail: If Err.Number = 13 Then Resume Next ElseIf Err.Number = -2147220979 Then DoCmd.Close acForm, "frmProgresso" MsgBox "Você inseriu um endereço de email inválido ou inexistente." & vbCrLf & "Verifique o email e tente novamente.", vbOKOnly + vbCritical, "Email inválido" DoCmd.Close acForm, "frmFinalizar" Me.txtEmail.SetFocus Else Resume Next End If -------------- Este é do Hotmail, não apresenta erro, mas tambem não envia On Error GoTo erromail Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.live.com" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .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") = "yyyy@hotmail.com" .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxx" .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Fields.Update End With Set Mens = New CDO.Message With Mens Set .Configuration = Config .From = Me.txtNome If Not IsNull(Me.txtEmail) Then .Sender = Me.txtEmail End If If Not IsNull(Me.txtCC) Then .CC = Me.txtCC End If If Not IsNull(Me.txtCCO) Then .BCC = Me.txtCCO End If .ReplyTo = "yyyy@hotmail.com" .BodyPart.Charset = "utf-8" .Subject = Me.txtassunto .HTMLBody = Me.txtMensagem .To = Me.txtEmail Dim L As Long If Me.lstAnexos.ListCount > 0 Then For L = 0 To Me.lstAnexos.ListCount - 1 .AddAttachment Me!lstAnexos.Column(0, L) Next L Else End If .Send End With Set Mens = Nothing Set Config = Nothing DoCmd.OpenForm "frmFinalizar" erromail: If Err.Number = 13 Then Resume Next ElseIf Err.Number = -2147220979 Then DoCmd.Close acForm, "frmProgresso" MsgBox "Você inseriu um endereço de email inválido ou inexistente." & vbCrLf & "Verifique o email e tente novamente.", vbOKOnly + vbCritical, "Email inválido" DoCmd.Close acForm, "frmFinalizar" Me.txtEmail.SetFocus Else Resume Next End If PAULO 28/10/2020 15:18:50 segue o cod. se for possivel me explicar como copio e colo uma parte de minha planilha no corpo do email , aguardo sua ajuda 'Declaro o objeto responsável pela mensagem Dim Mens As Object Dim Config As Object Set Mens = CreateObject("CDO.Message") Set Config = CreateObject("CDO.Configuration") With Config 'Configuramos o servidor smtp .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.yahoo.com.br" 'Configuramos a porta do servidor .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'Configuramos o tipo de cliente. 2 indica uso do Outlook .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1 'Configuramos o mecanismo de autenticação. .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")="teste@yahoo.com.br" 'Inserimos a senha do email usado na linha de cima .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxx" 'Configuramos o tempo da tentativa de conexão .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 'Atualizamos os campos .Fields.Update End With 'Instanciamos a variável Mens como uma nova mensagem CDO Set Mens = New CDO.Message 'Abrimos a variável Mens para receber os dados With Mens 'Instanciamos a configuração Set .Configuration = Config 'Inserimos o nome ou um título de quem envia .From = "Marcio" 'Email que será usado para o envio da mensagem( não entendi ja não foi informado antes acima?) .Sender = “teste@yahoo.com.br” 'É importante fornecer um sistema de codificação de acordo com o idioma. .BodyPart.Charset = "utf-8" 'Aqui, definimos o assunto da mensagem .Subject = "pedido de ajuda" 'Para enviar a mensagem em texto .TextBody = "a/c Larissa" 'Aqui, colocamos o email para onde a mensagem deverá ser enviada .To = "paulomls@globo.com" 'Com a instrução abaixo, enviamos anexos 'Podemos enviar vários arquivos, sendo um por linha '.AddAttachment “C:\Imagens\Nome da imagem.jpg” .AddAttachment “C:\Documents and Settings\Paulo\Meus documentos\cliente.Doc” 'Envia a mensagem .Send '(onde acusa o erro) End With Set Mens = Nothing Set Config = Nothing Valdino 28/10/2020 14:31:17 AMIGO, cole aqui todo o código para vermos como o mesmo está. Lembre-se de não colocar a senha do seu email. Se estiver tentando enviar anexos, talvez o problema esteja no caminho dos mesmos. AMIGO 28/10/2020 14:00:10 AMIGO PRECISO DE AJUDA COLE O CODIGO ACIMA E ESTA DANDO ERRO NA FUNÇÃO ".Send " erro em tempo de execução '-2147220958(80040222)': o caminho da pasta é necessário e não foi especificado , como posso resolver isto Valdino 28/10/2020 10:25:14 Olá Mendes! Poderia postar o código completo para darmos uma olhada? Tomando o cuidado de não colocar a senha do seu email. Ou, se preferir, envie para ccsregistros@gmail.com Mendes 27/10/2020 20:18:30 Prezado, não estou conseguindo configurar para o hotmail Valdino 07/10/2020 14:08:59 Marcio, obrigado pelas palavras. Acredito que pelo menos enquanto não barrarem o uso do cdo, estaremos bem servidos, embora, daqui a algum tempo, talvez tudo isso esteja funcionando de uma forma completamente diferente. Mas não será problema, somos seres altamente adaptáveis, hehehe. MARCIO MELO - RJ 01/10/2020 20:50:55 Perfeito podemos ter uma verdadeira mala direta programada, tornando a automatização completa sem a necessidade de clicar mais de uma vez... mesmo sendo um limite de 1000 podemos deixar isso também na instrução ou ainda usar mais de uma conta caso seja necessário, realmente podemos incrementar diversos recursos e tornar automatizado nos formulários com os relatótios/orçamentos, certificados, propagandas, cartões, etc... com anexos em PDF a natureza agradece, olha se juntar todas as idéias do Avelino, Valdino e Muca ... não iremos mais precisar de software de e-mail rsrsrs. Sou mais Brasil! Alegria geral :) Gilberto Rocha 15/09/2020 12:44:02 Nunca testei, mas segundo o JPaulo o número de emails é de 1000 por dia, pois existe proteção contra spans. Valdino 20/08/2020 16:15:42 Olá Jean! Você se refere ao número de destinatários? Ainda não encontrei um número máximo que estourasse o envio não. Quando ao número de mensagens por dia, pode enviar quantas quiser. Abraço e grato pela participação. jean 17/08/2020 11:03:14 ola otimo tutorial queria saber ate quantos email poderá mandar de uma só vez e por dia? obrigado jrv-jean@hotmail.com Vileman 15/08/2020 20:47:39 Caro Muca, muito obrigado pela atenção. Estou enviando resposta do resultado para seu e-mail, visto que acredito que aqui não seja o local ideal para isso. Muita Paz. Beto 13/08/2020 16:03:12 muito bom esse tuto. o melhor que já vi sobre cdo. completo e com todas as explicações bem apresentadas. parabens avelino e valdino. Muca 10/08/2020 21:31:42 Vileman, Enviei para o seu email. Porém o endereço está funcionando normalmente.... Muca Vileman 10/08/2020 21:11:05 Caro Muca, acessei o endereço: http://www.esnips.com/web/wwwmuca, no entanto, aparece o site sem ter nenhuma opção de dowload do arquivo em questão. Poderia enviar para meu e-mail: vileman@hotmail.com ? Se puder agradeço muito. Obrigado e muita Paz. vileman 10/08/2020 20:55:38 Fiz os testes com este exemplo e ficou muito bom, após fazer as minhas adequações, ou seja, os dados ficam gravados em 1 tabela. Aproveitando a ocasião gostaria de saber se seria possível gravar o caminho de cada anexo nesta mesma tabela, ou em uma tabela auxiliar, que ficasse vinculada a tabela Principal, como uma lista que mantém os anexos gravados ou pelo menos o caminho de cada anexo. Motivo: caso eu precisasse reenviar algum dos e-mails gravados recuperaria todos os anexos ou seriam revinculados para novo envio, visto que como está atualmente ele não me traria, pois todas as caixas de texto estao como não-acopladas; além do que como está em um formulário contínuo, sempre fica sempre mostrando o(s) último(s) anexo(s) em todos os registros do Formulário. Gostei da idéia do MUCA e vou ver como fica no meu, pois também pretendia usar com o Outlook Express. É nesse espaço que posso fazer este tipo de comentário ou ajuda ? Muca 10/08/2020 16:37:03 Parabéns Valdino, Tomei a liberdade de acrescentar algumas utilidades ao seu exemplo: - Busca automática de emails cadastrados no Outlook; - Possibilidade de envia via Outlook; - Possibilidade de envio para vários destinatários (concatenando os emails cadastrados); - Corretor ortográfico. O resultado está disponível em http://www.esnips.com/web/wwwmuca Muca. Johnny 09/08/2020 09:12:31 Concordo com o Vileman. Quem dera os vagabundos dispendessem suas mentes e tempo para algo bom. Parbéns ao Avelino por manter esse site espetacular e ao Valdino pela excelente contribuição. Saúde e Paz a ambos. Vileman 09/08/2020 00:18:45 Só me resta juntar-me aos colegas acima para parabenizar e agradecer aos Srs. Valdino Campos e Avelino, é muito bom e gratificante saber que ainda existem pessoas desse quilate nesse mundo tão violento e pertubador, é como se fossem 2 faróis iluminando o caminho e que Deus ainda acredita na raça humana. Parabéns !! E muita Paz !! Avelino João 08/08/2020 21:34:03 Avelino obrigado pelo exemplo maravilho mais uma vez partilhado com agente aqui no teu site, voce é mesmo um homem muito generoso, estava mesmo a precisar de uma dica de como mudar a cor do access através de um formulario tambem gostei muito do formulario de envio de e-mail é incrivél afinal de conta podemo fazer grande programa com o access. Valdino valeu muito pelo os materiais que tem nos oferecido aqui no site do Avelino desejo-vos muito sucesso os dois especialista em access. MARCIO MELO - RJ 08/08/2020 17:48:29 Nossa que maravilha, tudo que sempre quis... tutorial super completo do envio de e-mail nativo no access por DLL, não vejo a hora de testar, tenho usado a solução do Avelino que também me atendeu perfeitamente, agora já temos duas opções espetaculares, sou fã desse site e suspeito em falar, mas acreditem meu primeiro contato foi com o monta Ribbons e aos poucos a maioria dos recursos disponibilizados nesse site, veja o resultado no vídeo de demostração http://sic.iniciantejoomla.com/ Agradeço ao Sr. Valdino Campos e Avelino, por todo material e conhecimento que me vem sendo passado, sem vocês nada do que tenho hoje seria possível, fico a disposição em colaborar... Ricardo Araujo 07/02/2020 20:27:36 Olá! Primeiramente parabéns por compartilhar os seus conhecimentos! Estou com uma dúvida, todo esses comandos servem para vb6? se sim, seria exatamente igual está ai, ou precisa adapta-lo |