... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Como enviar emails, via SMTP, usando o CdoSys

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.

Referências

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:

'Declaro o objeto responsável pela mensagem
Dim Mens As Object

'Declaro o objeto responsável pela configuração da mensagem
Dim Config As Object

'Instancio o objeto criado para a mensagem
Set Mens = CreateObject("CDO.Message")

'Instancio o objeto criado para a configuração da mensagem
Set Config = CreateObject("CDO.Configuration")

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.

'Abrimos o Config para a configuração
With Config

'Configuramos o servidor smtp
'Cada provedor tem sua configuração. Alguns, como o bol, tem um “s”: smtps.bol.com.br
.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"

'Configuramos a porta do servidor
'Verifique a porta certa para o seu servidor
.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465

'Configuramos o tipo de cliente. 2 indica uso do Outlook
.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Configuramos o mecanismo de autenticação.
.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

'Configuramos o envio de mensagem segura ou simples, usando True ou False
'Alguns provedores requerem conexão segura. Neste caso, usamos True nesta propriedade
.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

'Configuramos o email a ser usado para o envio da mensagem
.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email@prov.com"

'Inserimos a senha do email usado na linha de cima
.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "SuaSenha"

'Configuramos o tempo da tentativa de conexão
.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

'Atualizamos os campos
.Fields.Update

'Finalizamos a configuração
End With

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.

'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 = "usandoaccess"

'Email que será usado para o envio da mensagem
.Sender = “ccs-sistemas@hotmail.com”

'Podemos inserir um ou mais emails para receber uma cópia
.CC = Me.txtCC

'Podemos inserir emails para receber cópia oculta da mensagem
.BCC = Me.txtCCO

'É possível definir um email de resposta que será usado para receber uma resposta quando
'quem recebeu a mensagem clicar em Responder.
.ReplyTo = “Email de resposta”

'É importante fornecer um sistema de codificação de acordo com o idioma.
.BodyPart.Charset = "utf-8"

'Aqui, definimos o assunto da mensagem
.Subject = Me.txtAssunto

'Podemos definir o corpo da mensagem de três formas:

'Para enviar a mensagem em texto
.TextBody = Me.txtMensagem

'Para enviar a mensagem em HTML
.HTMLBody = Me.txtMensagem
 
'Também podemos enviar uma página da Internet, no lugar da mensagem
.CreateMHTMLBody "http://www.usandoaccess.com.br"

'Aqui, colocamos o email para onde a mensagem deverá ser enviada
.To = "criquio@hotmail.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:\Arquivos\Ata reunião.doc”

'Envia a mensagem
.Send

'Fechamos a instrução para a variável Mens
End With

'Liberamos a variável Mens da memória
Set Mens = Nothing

'Liberamos a variável Config da memória
Set Config = Nothing

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:

'Declaramos a variável que representará o objeto FileDialog
Dim fDialog As Office.FileDialog

'Declaramos a variável que armazenará os arquivos selecionados
Dim varFile As Variant

'Instanciamos o objeto FileDialog na variável fDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

'Abrimos a variável fDialog para receber os parâmetros
With fDialog
  
'Podemos definir a pasta inicial de pesquisa. Aqui será a pasta do aplicativo.
'Para definir outro caminho qualquer, pode usar o caminho completo: “c:\Arquivos\Imagens”
.InitialFileName = CurrentProject.Path

'Podemos permitir seleção de mais de um arquivo com True ou apenas um com False
.AllowMultiSelect = True

'Podemos alterar o título da caixa de diálogo
.Title = "Anexar arquivo"

'Aqui, limpamos o filtro dos tipos de arquivos para recarregá-los, conforme necessidade
.Filters.Clear
'Agora, podemos definir filtros para vários tipos de arquivos
.Filters.Add "Imagens", "*.bmp;*.gif;*.ico;*.jpg;*.jpeg;*.png;*.tiff"
.Filters.Add "Excel", "*.xls;*.xlsx"
.Filters.Add "PowerPoint", "*.ppt;*.pptx;*.pps;*.ppsx"
.Filters.Add "Word", "*.doc;*.docx"
.Filters.Add "Todos os arquivos", "*.*"

'Podemos alterar o texto do botão “Abrir”. Este efeito será visualizado ao selecionar arquivos
.ButtonName = "Abrir arquivo(s)"

'Caso tenha escolhido algum arquivo...
If .Show = True Then

'... percorra a lista de arquivos selecionados, ligando-os à variável varFile
For Each varFile In .SelectedItems

'Adicione cada arquivo como uma linha na listbox lstAnexos.
Me.lstAnexos.AddItem varFile

'Passe para o próximo ítem na varFile.
Next

'Caso a ação seja cancelada...
Else

'... cancele a inclusão.
Exit Sub
End If

'Finalize a configuração.
End With

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:

'...Trocamos as linhas abaixo...

'.AddAttachment “C:\Imagens\Nome da imagem.jpg”
'.AddAttachment “C:\Arquivos\Ata reunião.doc”

'... por estas...

'variável que representa as linhas da listbox
Dim L As Long

'Iniciar ação
Do

'Adicione o arquivo cujo endereço está na primeira linha da listbox
.AddAttachment Me!lstAnexos.Column(0, L)

'Aumente uma linha, ou seja, passe para a próxima linha da listbox
L = L + 1

'Faça um loop enquanto as linhas não acabam 
Loop While L <= Me.lstAnexos.ListCount

'Outra opção que pode substituir o código acima para o envio de anexos:

Dim L As Long
For L = 0 To Me.lstAnexos.ListCount - 1
.AddAttachment Me!lstAnexos.Column(0, L)
Next L

DADOS DE ALGUNS SERVIDORES

SERVIDORSMTPPORTASSL
Bolsmtps.bol.com.br587False
Gmailsmtp.gmail.com465True
Uolsmtp.uol.com.br587False
Terrasmtp.terra.com.br587False
IGsmtp.ig.com.br465True
iBestsmtp.ibest.com.br465True
iTelefônicasmtp.itelefonica.com.br587False
Yahoosmtp.mail.yahoo.com.br587True
Hotmailsmtp.live.com587True
Aolsmtp.aol.com587True

 

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.

EmailCDO

 

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

 


 

 


118 comentários

MARCIO MELO - RJ   08/08/2011 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...

Avelino João   08/08/2011 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.

Vileman   09/08/2011 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 !!

Johnny   09/08/2011 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.

Muca   10/08/2011 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.

vileman   10/08/2011 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 ?

Vileman   10/08/2011 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.

Muca   10/08/2011 21:31:42

Vileman,
Enviei para o seu email. Porém o endereço está funcionando normalmente....
Muca

Beto   13/08/2011 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.

Vileman   15/08/2011 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.

jean   17/08/2011 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

Valdino   20/08/2011 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.

Gilberto Rocha   15/09/2011 12:44:02

Nunca testei, mas segundo o JPaulo o número de emails é de 1000 por dia, pois existe proteção contra spans.

MARCIO MELO - RJ   01/10/2011 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 :)

Valdino   07/10/2011 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.

Mendes   27/10/2011 20:18:30

Prezado, não estou conseguindo configurar para o hotmail

Valdino   28/10/2011 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

AMIGO   28/10/2011 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/2011 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.

PAULO   28/10/2011 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




Mendes   28/10/2011 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

Renato Siva   17/11/2011 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.

Celso Henrique   25/11/2011 07:00:52

Muito bom. Mágico
Parabéns Valdivino e Avelino.


Eder Castro   02/12/2011 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

Valdino   02/12/2011 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   05/12/2011 11:54:48

Valdino muito obrigado, deu certo.

Gostaria de saber se vc tem algum exemplo de conversor de txt para html.

Grato

Eder   05/12/2011 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.

Valdino   05/12/2011 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   07/12/2011 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   07/12/2011 10:56:39

Eder, não captei muito bem qual é a intenção. Enviei um email para ccsregistros@gmail.com exemplificando para melhor entendimento.

Gilvan Junior   08/12/2011 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   16/12/2011 10:36:20

Gilvan, você já pesquisou o termo no módulo para ver se o encontra para retirá-lo?

Marcelo Brandão   21/12/2011 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

Gladiomir Dutra   08/01/2012 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

Eder   30/01/2012 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.

Avelino Sampaio   31/01/2012 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   31/01/2012 17:38:27

Avelino muito obrigado deu certo.

Vileman   07/02/2012 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

Vileman   02/03/2012 18:19:04

Valdino, já consegui resolver com ajuda dos colegas Balem e Norbs do Fórum Máximo Access.

Obrigado.

Eduardo Rubio   23/03/2012 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????)

Valdino   23/03/2012 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 >.

Alexandre Calicchio   30/03/2012 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

Valdino   31/03/2012 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.

Daniel   23/04/2012 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   23/04/2012 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/2012 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!!

Flavio SP   24/04/2012 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

gilson   25/04/2012 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

FALCAO   25/04/2012 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

Daniel   26/04/2012 21:06:06

Que coisa, ta dificil resolver esse problema do smtp do terra.. Ninguem sabe?? Abracos

Avelino Sampaio   27/04/2012 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   28/04/2012 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,

Wanderson   30/04/2012 16:44:22

Pessoal, estou com o mesmo problema com o terra, não funciona de jeito nenhum.

Velloso   03/05/2012 14:03:12

Pelo visto também não sou o único com problemas com o terra. Ninguem saberia resolver esse problema??

Valdino   03/05/2012 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.

Daniel (velloso2008@gmail.com)   11/05/2012 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!!

Camilo   20/05/2012 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

FLAVIO   21/05/2012 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   22/05/2012 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

Pedro Almeida   06/07/2012 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!

Avelino Sampaio   07/07/2012 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!

Marcelo L.   31/07/2012 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!

Avelino Sampaio   02/08/2012 09:10:53

Marcelo L.

Obrigado por compartilhar com esta solução maravilhosa!

Sucesso!

Amanda   05/09/2012 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   05/09/2012 19:12:32

Olá Amanda. Veja aonde tem ".TextBody = Me.txtMensagem". Você pode colocar o nome do campo memorando no lugar de txtMensagem.

Valdino   05/09/2012 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

Julio   19/10/2012 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

Valdino   19/10/2012 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.

Edson   18/01/2013 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?

Valdino   21/01/2013 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.

Marcio Melo -RJ   16/02/2013 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!


Bruno   09/03/2013 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.

Valdino   11/03/2013 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.

Valdino   11/03/2013 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.

Almir Gobbo   29/04/2013 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

Valdino   29/04/2013 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   30/04/2013 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   30/04/2013 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/2013 16:39:15

Ok. Obrigado pelo pronto retorno.

Rafael   10/06/2013 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???

Valdino   11/06/2013 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

Sérgio Augusto   20/06/2013 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   02/08/2013 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/

CARLOS EDUARDO   30/08/2013 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   31/08/2013 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.

Hephraim BF   06/10/2013 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

Avelino Sampaio   07/10/2013 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   07/10/2013 08:29:35

Excelente, muito bom cara!

Valeu!

Ronilson   15/11/2013 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

Vandré   21/11/2013 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.

Fernando Luís Guimarães   23/01/2014 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   27/01/2014 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.

Madson Braz   11/03/2014 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).

Joseny Freire de Carvalho Gonçalves   12/03/2014 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,

Avelino Sampaio   13/03/2014 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!

WSenna   22/03/2014 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.

WSenna   23/03/2014 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

Felipe Stahlhofer   28/03/2014 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"

Felipe Stahlhofer   28/03/2014 14:52:11

.AddAttachment CurrentProject.Path & "\Enviados\" & "Orcamento" & Me!idOrcamento & ".pdf"

Esqueci de retirar o P no exemplo anterior.

Kiriath   15/05/2014 10:19:29

Parabens ao Valdino bem como aos companheiros que acrescentaram suas sujestoes.

Ivan   10/06/2014 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?

Rui Ferreira   14/07/2014 16:17:19

Valeu, o download foi uma grande ajuda.

NELIO LIMA DA SILVA   01/08/2014 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

ADEMIR   12/11/2014 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
-----

ADEMIR   13/11/2014 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...

Avelino Sampaio   14/11/2014 07:34:55

Ademir,

muito obrigado por compartilhar sua excelente dica!

Sucesso!

arnaldo   05/12/2014 09:20:16

Cara essa dica da segurança salvou o dia. Muito boa mesmo.

Bruno   12/12/2014 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

WELSON   15/01/2015 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?

Eduardo   09/03/2015 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

cicero maia   20/03/2015 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.

ANDERSON GALECKI   06/08/2015 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


Guilherme Marcone Ferreira Alves   19/11/2015 08:36:11

Bom dia ANDERSON GALECKI!

Estou com o mesmo problema.

Você conseguiu resolver?

Meu e-mail é: viga@viga.ind.br

Valter (só sistema software)   13/04/2016 13:59:34

Olá, experimente criar um e-mail de envio no yahoo, passei pelo mesmo problema e fiz isso resolveu...

Valmir Cruz   28/11/2016 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 " do anexo"

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

Feltz   24/02/2017 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

Marcelo Ferreira   27/07/2017 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!

Avelino Sampaio   27/07/2017 16:00:28

Marcelo,

baixe novamente e atente para o tamanho final do arquivo.

No aguardo


Envie seu comentário: